X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/7a654f8d43fdb43d78b63d90528bed6e86b608cc..f562e4c6e5fac7bcb445985b99acbea4d706e6f0:/docs/source/Tree.html diff --git a/docs/source/Tree.html b/docs/source/Tree.html index 1405a469..f87d8132 100644 --- a/docs/source/Tree.html +++ b/docs/source/Tree.html @@ -1,43 +1,62 @@ -
+ +/** - * @class Ext.data.Tree - * + + + + +\ No newline at end of file +});The source code + + + + + + +/** + * @class Ext.data.Tree + * * This class is used as a container for a series of nodes. The nodes themselves maintain * the relationship between parent/child. The tree itself acts as a manager. It gives functionality - * to retrieve a node by its identifier: {@link #getNodeById}. + * to retrieve a node by its identifier: {@link #getNodeById}. * - * The tree also relays events from any of it's child nodes, allowing them to be handled in a - * centralized fashion. In general this class is not used directly, rather used internally + * The tree also relays events from any of it's child nodes, allowing them to be handled in a + * centralized fashion. In general this class is not used directly, rather used internally * by other parts of the framework. * - * @constructor - * @param {Node} root (optional) The root node */ Ext.define('Ext.data.Tree', { alias: 'data.tree', - + mixins: { observable: "Ext.util.Observable" }, - /** - * The root node for this tree - * @type Node + /** + * @property {Ext.data.NodeInterface} + * The root node for this tree */ root: null, - + + /** + * Creates new Tree object. + * @param {Ext.data.NodeInterface} root (optional) The root node + */ constructor: function(root) { var me = this; + - me.nodeHash = {}; me.mixins.observable.constructor.call(me); - + if (root) { me.setRootNode(root); } }, - /** + /** * Returns the root node for this tree. * @return {Ext.data.NodeInterface} */ @@ -45,137 +64,102 @@ Ext.define('Ext.data.Tree', { return this.root; }, - /** + /** * Sets the root node for this tree. * @param {Ext.data.NodeInterface} node * @return {Ext.data.NodeInterface} The root node */ setRootNode : function(node) { var me = this; - + me.root = node; Ext.data.NodeInterface.decorate(node); - + if (me.fireEvent('beforeappend', null, node) !== false) { node.set('root', true); node.updateInfo(); - + me.relayEvents(node, [ - /** + /** * @event append - * Fires when a new child node is appended to a node in this tree. - * @param {Tree} tree The owner tree - * @param {Node} parent The parent node - * @param {Node} node The newly appended node - * @param {Number} index The index of the newly appended node + * @alias Ext.data.NodeInterface#append */ "append", - /** + /** * @event remove - * Fires when a child node is removed from a node in this tree. - * @param {Tree} tree The owner tree - * @param {Node} parent The parent node - * @param {Node} node The child node removed + * @alias Ext.data.NodeInterface#remove */ "remove", - /** + /** * @event move - * Fires when a node is moved to a new location in the tree - * @param {Tree} tree The owner tree - * @param {Node} node The node moved - * @param {Node} oldParent The old parent of this node - * @param {Node} newParent The new parent of this node - * @param {Number} index The index it was moved to + * @alias Ext.data.NodeInterface#move */ "move", - /** + /** * @event insert - * Fires when a new child node is inserted in a node in this tree. - * @param {Tree} tree The owner tree - * @param {Node} parent The parent node - * @param {Node} node The child node inserted - * @param {Node} refNode The child node the node was inserted before + * @alias Ext.data.NodeInterface#insert */ "insert", - /** + /** * @event beforeappend - * Fires before a new child is appended to a node in this tree, return false to cancel the append. - * @param {Tree} tree The owner tree - * @param {Node} parent The parent node - * @param {Node} node The child node to be appended + * @alias Ext.data.NodeInterface#beforeappend */ "beforeappend", - /** + /** * @event beforeremove - * Fires before a child is removed from a node in this tree, return false to cancel the remove. - * @param {Tree} tree The owner tree - * @param {Node} parent The parent node - * @param {Node} node The child node to be removed + * @alias Ext.data.NodeInterface#beforeremove */ "beforeremove", - /** + /** * @event beforemove - * Fires before a node is moved to a new location in the tree. Return false to cancel the move. - * @param {Tree} tree The owner tree - * @param {Node} node The node being moved - * @param {Node} oldParent The parent of the node - * @param {Node} newParent The new parent the node is moving to - * @param {Number} index The index it is being moved to + * @alias Ext.data.NodeInterface#beforemove */ "beforemove", - /** + /** * @event beforeinsert - * Fires before a new child is inserted in a node in this tree, return false to cancel the insert. - * @param {Tree} tree The owner tree - * @param {Node} parent The parent node - * @param {Node} node The child node to be inserted - * @param {Node} refNode The child node the node is being inserted before + * @alias Ext.data.NodeInterface#beforeinsert */ "beforeinsert", - /** + /** * @event expand - * Fires when this node is expanded. - * @param {Node} this The expanding node + * @alias Ext.data.NodeInterface#expand */ "expand", - /** + /** * @event collapse - * Fires when this node is collapsed. - * @param {Node} this The collapsing node + * @alias Ext.data.NodeInterface#collapse */ "collapse", - /** + /** * @event beforeexpand - * Fires before this node is expanded. - * @param {Node} this The expanding node + * @alias Ext.data.NodeInterface#beforeexpand */ "beforeexpand", - /** + /** * @event beforecollapse - * Fires before this node is collapsed. - * @param {Node} this The collapsing node + * @alias Ext.data.NodeInterface#beforecollapse */ "beforecollapse" , - /** + /** * @event rootchange * Fires whenever the root node is changed in the tree. * @param {Ext.data.Model} root The new root */ "rootchange" ]); - + node.on({ scope: me, insert: me.onNodeInsert, @@ -183,24 +167,25 @@ Ext.define('Ext.data.Tree', { remove: me.onNodeRemove }); - me.registerNode(node); + me.nodeHash = {}; + me.registerNode(node); me.fireEvent('append', null, node); me.fireEvent('rootchange', node); } - + return node; }, - - /** + + /** * Flattens all the nodes in the tree into an array. * @private - * @return {Array} The flattened nodes. + * @return {Ext.data.NodeInterface[]} The flattened nodes. */ flatten: function(){ var nodes = [], hash = this.nodeHash, key; - + for (key in hash) { if (hash.hasOwnProperty(key)) { nodes.push(hash[key]); @@ -208,38 +193,38 @@ Ext.define('Ext.data.Tree', { } return nodes; }, - - /** + + /** * Fired when a node is inserted into the root or one of it's children * @private * @param {Ext.data.NodeInterface} parent The parent node * @param {Ext.data.NodeInterface} node The inserted node */ onNodeInsert: function(parent, node) { - this.registerNode(node); + this.registerNode(node, true); }, - - /** + + /** * Fired when a node is appended into the root or one of it's children * @private * @param {Ext.data.NodeInterface} parent The parent node * @param {Ext.data.NodeInterface} node The appended node */ onNodeAppend: function(parent, node) { - this.registerNode(node); + this.registerNode(node, true); }, - - /** + + /** * Fired when a node is removed from the root or one of it's children * @private * @param {Ext.data.NodeInterface} parent The parent node * @param {Ext.data.NodeInterface} node The removed node */ onNodeRemove: function(parent, node) { - this.unregisterNode(node); + this.unregisterNode(node, true); }, - /** + /** * Gets a node in this tree by its id. * @param {String} id * @return {Ext.data.NodeInterface} The match node. @@ -248,25 +233,37 @@ Ext.define('Ext.data.Tree', { return this.nodeHash[id]; }, - /** + /** * Registers a node with the tree * @private * @param {Ext.data.NodeInterface} The node to register + * @param {Boolean} [includeChildren] True to unregister any child nodes */ - registerNode : function(node) { + registerNode : function(node, includeChildren) { this.nodeHash[node.getId() || node.internalId] = node; + if (includeChildren === true) { + node.eachChild(function(child){ + this.registerNode(child, true); + }, this); + } }, - /** + /** * Unregisters a node with the tree * @private * @param {Ext.data.NodeInterface} The node to unregister + * @param {Boolean} [includeChildren] True to unregister any child nodes */ - unregisterNode : function(node) { + unregisterNode : function(node, includeChildren) { delete this.nodeHash[node.getId() || node.internalId]; + if (includeChildren === true) { + node.eachChild(function(child){ + this.unregisterNode(child, true); + }, this); + } }, - - /** + + /** * Sorts this tree * @private * @param {Function} sorterFn The function to use for sorting @@ -275,8 +272,8 @@ Ext.define('Ext.data.Tree', { sort: function(sorterFn, recursive) { this.getRootNode().sort(sorterFn, recursive); }, - - /** + + /** * Filters this tree * @private * @param {Function} sorterFn The function to use for filtering @@ -285,4 +282,6 @@ Ext.define('Ext.data.Tree', { filter: function(filters, recursive) { this.getRootNode().filter(filters, recursive); } -});