8
0
Просмотр исходного кода

Changed: deep unbinding is now default (and only) behaviour of `view.DomConverter.unbindDomElement`.

Szymon Cofalik 8 лет назад
Родитель
Сommit
cd6725f58c

+ 10 - 3
packages/ckeditor5-engine/src/view/domconverter.js

@@ -134,15 +134,22 @@ export default class DomConverter {
 	}
 	}
 
 
 	/**
 	/**
-	 * Unbinds given `domElement` from the view element it was bound to.
+	 * Unbinds given `domElement` from the view element it was bound to. Unbinding is deep, meaning that all children of
+	 * `domElement` will be unbound too.
 	 *
 	 *
 	 * @param {HTMLElement} domElement DOM element to unbind.
 	 * @param {HTMLElement} domElement DOM element to unbind.
 	 */
 	 */
 	unbindDomElement( domElement ) {
 	unbindDomElement( domElement ) {
 		const viewElement = this._domToViewMapping.get( domElement );
 		const viewElement = this._domToViewMapping.get( domElement );
 
 
-		this._domToViewMapping.delete( domElement );
-		this._viewToDomMapping.delete( viewElement );
+		if ( viewElement ) {
+			this._domToViewMapping.delete( domElement );
+			this._viewToDomMapping.delete( viewElement );
+
+			for ( let child of domElement.childNodes ) {
+				this.unbindDomElement( child );
+			}
+		}
 	}
 	}
 
 
 	/**
 	/**

+ 1 - 14
packages/ckeditor5-engine/src/view/renderer.js

@@ -473,7 +473,7 @@ export default class Renderer {
 				i++;
 				i++;
 			} else if ( action === 'delete' ) {
 			} else if ( action === 'delete' ) {
 				// Whenever element is removed from DOM, unbind it and all of its children.
 				// Whenever element is removed from DOM, unbind it and all of its children.
-				unbindDeep( actualDomChildren[ i ], this.domConverter );
+				this.domConverter.unbindDomElement( actualDomChildren[ i ] );
 				remove( actualDomChildren[ i ] );
 				remove( actualDomChildren[ i ] );
 			} else { // 'equal'
 			} else { // 'equal'
 				i++;
 				i++;
@@ -687,16 +687,3 @@ function trimSelection( selection ) {
 
 
 	return newSelection;
 	return newSelection;
 }
 }
-
-// Unbind given `domElement` and all of its children from view using given `domConverter`.
-//
-// @private
-// @param {HTMLElement} domElement
-// @param {module:engine/view/domconverter~DomConverter}
-function unbindDeep( domElement, domConverter ) {
-	domConverter.unbindDomElement( domElement );
-
-	for ( let child of domElement.childNodes ) {
-		unbindDeep( child, domConverter );
-	}
-}