Alternate names
Ext.data.NodeHierarchy
Ext.BaseExt.data.NodeInterfaceRequires
Files
This class is meant to be used as a set of methods that are applied to the prototype of a Record to decorate it with a Node API. This means that models used in conjunction with a tree will have all of the tree related methods available on the model. In general this class will not be used directly by the developer. This class also creates extra fields on the model if they do not exist, to help maintain the tree state and UI. These fields are:
An array of this nodes children. Array will be empty if this node has no children.
A reference to this node's first child node. null
if this node has no children.
A reference to this node's last child node. null
if this node has no children.
A reference to this node's next sibling node. null
if this node does not have a next sibling.
A reference to this node's parent node. null
if this node is the root node.
A reference to this node's previous sibling node. null
if this node does not have a previous sibling.
Get the reference to the current class from which this object was instantiated. Unlike statics,
this.self
is scope-dependent and it's meant to be used for dynamic inheritance. See statics
for a detailed comparison
Ext.define('My.Cat', {
statics: {
speciesName: 'Cat' // My.Cat.speciesName = 'Cat'
},
constructor: function() {
alert(this.self.speciesName); // dependent on 'this'
},
clone: function() {
return new this.self();
}
});
Ext.define('My.SnowLeopard', {
extend: 'My.Cat',
statics: {
speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'
}
});
var cat = new My.Cat(); // alerts 'Cat'
var snowLeopard = new My.SnowLeopard(); // alerts 'Snow Leopard'
var clone = snowLeopard.clone();
alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'
Insert node(s) as the last child node of this node.
If the node was previously a child node of another parent node, it will be removed from that node first.
The node or Array of nodes to append.
The appended node if single append, or null
if an array was passed.
Bubbles up the tree from this node, calling the specified function with each node. The arguments to the function
will be the args provided or the current node. If the function returns false
at any point,
the bubble is stopped.
Call the original method that was previously overridden with override,
This method is deprecated as callParent does the same thing.
Ext.define('My.Cat', {
constructor: function() {
alert("I'm a cat!");
}
});
My.Cat.override({
constructor: function() {
alert("I'm going to be a cat!");
var instance = this.callOverridden();
alert("Meeeeoooowwww");
return instance;
}
});
var kitty = new My.Cat(); // alerts "I'm going to be a cat!"
// alerts "I'm a cat!"
// alerts "Meeeeoooowwww"
The arguments, either an array or the arguments
object
from the current method, for example: this.callOverridden(arguments)
Returns the result of calling the overridden method
Call the "parent" method of the current method. That is the method previously overridden by derivation or by an override (see Ext.define).
Ext.define('My.Base', {
constructor: function (x) {
this.x = x;
},
statics: {
method: function (x) {
return x;
}
}
});
Ext.define('My.Derived', {
extend: 'My.Base',
constructor: function () {
this.callParent([21]);
}
});
var obj = new My.Derived();
alert(obj.x); // alerts 21
This can be used with an override as follows:
Ext.define('My.DerivedOverride', {
override: 'My.Derived',
constructor: function (x) {
this.callParent([x*2]); // calls original My.Derived constructor
}
});
var obj = new My.Derived();
alert(obj.x); // now alerts 42
This also works with static methods.
Ext.define('My.Derived2', {
extend: 'My.Base',
statics: {
method: function (x) {
return this.callParent([x*2]); // calls My.Base.method
}
}
});
alert(My.Base.method(10)); // alerts 10
alert(My.Derived2.method(10)); // alerts 20
Lastly, it also works with overridden static methods.
Ext.define('My.Derived2Override', {
override: 'My.Derived2',
statics: {
method: function (x) {
return this.callParent([x*2]); // calls My.Derived2.method
}
}
});
alert(My.Derived2.method(10)); // now alerts 40
To override a method and replace it and also call the superclass method, use callSuper. This is often done to patch a method to fix a bug.
The arguments, either an array or the arguments
object
from the current method, for example: this.callParent(arguments)
Returns the result of calling the parent method
This method is used by an override to call the superclass method but bypass any overridden method. This is often done to "patch" a method that contains a bug but for whatever reason cannot be fixed directly.
Consider:
Ext.define('Ext.some.Class', {
method: function () {
console.log('Good');
}
});
Ext.define('Ext.some.DerivedClass', {
method: function () {
console.log('Bad');
// ... logic but with a bug ...
this.callParent();
}
});
To patch the bug in DerivedClass.method
, the typical solution is to create an
override:
Ext.define('App.paches.DerivedClass', {
override: 'Ext.some.DerivedClass',
method: function () {
console.log('Fixed');
// ... logic but with bug fixed ...
this.callSuper();
}
});
The patch method cannot use callParent
to call the superclass method
since
that would call the overridden method containing the bug. In other words, the
above patch would only produce "Fixed" then "Good" in the console log, whereas,
using callParent
would produce "Fixed" then "Bad" then "Good".
The arguments, either an array or the arguments
object
from the current method, for example: this.callSuper(arguments)
Returns the result of calling the superclass method
Cascades down the tree from this node, calling the specified function with each node. The arguments to the function will be the args provided or the current node. If the function returns false at any point, the cascade is stopped on that branch.
Returns true
if this node is an ancestor (at any point) of the passed node.
Creates a copy (clone) of this Node.
A new id, defaults to this Node's id.
If passed as true
, all child Nodes are recursively copied into the new Node.
If omitted or false
, the copy will have no child Nodes.
A copy of this Node.
Iterates the child nodes of this node, calling the specified function with each node. The arguments to the function will be the args provided or the current node. If the function returns false at any point, the iteration stops.
Finds the first child that has the attribute with the specified value.
The attribute name.
The value to search for.
true
to search through nodes deeper than the immediate children.
The found child or null
if none was found.
Finds the first child by a custom function. The child matches if the function passed returns true
.
A function which must return true
if the passed Node is the required Node.
The scope (this
reference) in which the function is executed. Defaults to the Node being tested.
True to search through nodes deeper than the immediate children.
The found child or null if none
was found.
Returns the index of a child node.
The index of the node or -1 if it was not found.
Initialize configuration for this class. a typical example:
Ext.define('My.awesome.Class', {
// The default config
config: {
name: 'Awesome',
isAwesome: true
},
constructor: function(config) {
this.initConfig(config);
}
});
var awesome = new My.awesome.Class({
name: 'Super Awesome'
});
alert(awesome.getName()); // 'Super Awesome'
mixins The mixin prototypes as key - value pairs
Inserts the first node before the second node in this nodes childNodes
collection.
The node to insert.
The node to insert before (if null
the node is appended).
The inserted node.
Insert a node into this node.
The zero-based index to insert the node at.
The node to insert.
The record you just inserted.
Returns true
if the passed node is an ancestor (at any point) of this node.
Returns true
if this node has one or more child nodes, or if the expandable
node attribute is explicitly specified as true
, otherwise returns false
.
Removes this node from its parent.
true
to destroy the node upon removal.
Defaults to: false
Removes all child nodes from this node.
true
to destroy the node upon removal.
Defaults to: false
Removes a child node from this node.
The node to remove.
true
to destroy the node upon removal.
Defaults to: false
The removed node.
Replaces one child node in this node with another.
The replacement node.
The node to replace.
The replaced node.
Sorts this nodes children using the supplied sort function.
A function which, when passed two Nodes, returns -1, 0 or 1 depending upon required sort order.
Whether or not to apply this sort recursively.
Set to true to not fire a sort event.
Get the reference to the class from which this object was instantiated. Note that unlike self,
this.statics()
is scope-independent and it always returns the class from which it was called, regardless of what
this
points to during run-time
Ext.define('My.Cat', {
statics: {
totalCreated: 0,
speciesName: 'Cat' // My.Cat.speciesName = 'Cat'
},
constructor: function() {
var statics = this.statics();
alert(statics.speciesName); // always equals to 'Cat' no matter what 'this' refers to
// equivalent to: My.Cat.speciesName
alert(this.self.speciesName); // dependent on 'this'
statics.totalCreated++;
},
clone: function() {
var cloned = new this.self(); // dependent on 'this'
cloned.groupName = this.statics().speciesName; // equivalent to: My.Cat.speciesName
return cloned;
}
});
Ext.define('My.SnowLeopard', {
extend: 'My.Cat',
statics: {
speciesName: 'Snow Leopard' // My.SnowLeopard.speciesName = 'Snow Leopard'
},
constructor: function() {
this.callParent();
}
});
var cat = new My.Cat(); // alerts 'Cat', then alerts 'Cat'
var snowLeopard = new My.SnowLeopard(); // alerts 'Cat', then alerts 'Snow Leopard'
var clone = snowLeopard.clone();
alert(Ext.getClassName(clone)); // alerts 'My.SnowLeopard'
alert(clone.groupName); // alerts 'Cat'
alert(My.Cat.totalCreated); // alerts 3
Add methods / properties to the prototype of this class.
Ext.define('My.awesome.Cat', {
constructor: function() {
// ...
}
});
My.awesome.Cat.addMembers({
meow: function() {
alert('Meowww...');
}
});
var kitty = new My.awesome.Cat();
kitty.meow();
Add / override static properties of this class.
Ext.define('My.cool.Class', {
// this.se
});
My.cool.Class.addStatics({
someProperty: 'someValue', // My.cool.Class.someProperty = 'someValue'
method1: function() { }, // My.cool.Class.method1 = function() { ... };
method2: function() { } // My.cool.Class.method2 = function() { ... };
});
this
Borrow another class' members to the prototype of this class.
Ext.define('Bank', {
money: '$$$',
printMoney: function() {
alert('$$$$$$$');
}
});
Ext.define('Thief', {
// ...
});
Thief.borrow(Bank, ['money', 'printMoney']);
var steve = new Thief();
alert(steve.money); // alerts '$$$'
steve.printMoney(); // alerts '$$$$$$$'
The class to borrow members from
The names of the members to borrow
this
Create a new instance of this Class.
Ext.define('My.cool.Class', {
// ...
});
My.cool.Class.create({
someConfig: true
});
All parameters are passed to the constructor of the class.
the created instance.
Create aliases for existing prototype methods. Example:
Ext.define('My.cool.Class', {
method1: function() { },
method2: function() { }
});
var test = new My.cool.Class();
My.cool.Class.createAlias({
method3: 'method1',
method4: 'method2'
});
test.method3(); // test.method1()
My.cool.Class.createAlias('method5', 'method3');
test.method5(); // test.method3() -> test.method1()
The new method name, or an object to set multiple aliases. See flexSetter
The original method name
This method allows you to decorate a Record's prototype to implement the NodeInterface. This adds a set of methods, new events, new properties and new fields on every Record with the same Model as the passed Record.
The Record you want to decorate the prototype of.
Get the current class' name in string format.
Ext.define('My.cool.Class', {
constructor: function() {
alert(this.self.getName()); // alerts 'My.cool.Class'
}
});
My.cool.Class.getName(); // 'My.cool.Class'
className
Override members of this class. Overridden methods can be invoked via callParent.
Ext.define('My.Cat', {
constructor: function() {
alert("I'm a cat!");
}
});
My.Cat.override({
constructor: function() {
alert("I'm going to be a cat!");
var instance = this.callParent(arguments);
alert("Meeeeoooowwww");
return instance;
}
});
var kitty = new My.Cat(); // alerts "I'm going to be a cat!"
// alerts "I'm a cat!"
// alerts "Meeeeoooowwww"
As of 2.1, direct use of this method is deprecated. Use Ext.define instead:
Ext.define('My.CatOverride', {
override: 'My.Cat',
constructor: function() {
alert("I'm going to be a cat!");
var instance = this.callParent(arguments);
alert("Meeeeoooowwww");
return instance;
}
});
The above accomplishes the same result but can be managed by the Ext.Loader which can properly order the override and its target class and the build process can determine whether the override is needed based on the required state of the target class (My.Cat).
This method has been deprecated since 2.1.0
Please use Ext.define instead
The properties to add to this class. This should be specified as an object literal containing one or more properties.
this class
Fires when a new child node is appended.
This node.
The newly appended node.
The index of the newly appended node.
The options object passed to Ext.util.Observable.addListener.
Fires before a new child is appended, return false
to cancel the append.
This node.
The child node to be appended.
The options object passed to Ext.util.Observable.addListener.
Fires before this node is collapsed.
The collapsing node.
The options object passed to Ext.util.Observable.addListener.
Fires before this node is expanded.
The expanding node.
The options object passed to Ext.util.Observable.addListener.
Fires before a new child is inserted, return false to cancel the insert.
This node
The child node to be inserted
The child node the node is being inserted before
The options object passed to Ext.util.Observable.addListener.
Fires before this node is moved to a new location in the tree. Return false
to cancel the move.
This node.
The parent of this node.
The new parent this node is moving to.
The index it is being moved to.
The options object passed to Ext.util.Observable.addListener.
Fires before a child is removed, return false
to cancel the remove.
This node.
The child node to be removed.
The options object passed to Ext.util.Observable.addListener.
Fires when this node is collapsed.
The collapsing node.
The options object passed to Ext.util.Observable.addListener.
Fires when this node is expanded.
The expanding node.
The options object passed to Ext.util.Observable.addListener.
Fires when a new child node is inserted.
This node.
The child node inserted.
The child node the node was inserted before.
The options object passed to Ext.util.Observable.addListener.
Fires when this node is moved to a new location in the tree.
This node.
The old parent of this node.
The new parent of this node.
The index it was moved to.
The options object passed to Ext.util.Observable.addListener.
Fires when a child node is removed.
This node.
The removed node.
The options object passed to Ext.util.Observable.addListener.
Fires when this node's childNodes are sorted.
This node.
The childNodes of this node.
The options object passed to Ext.util.Observable.addListener.