Javascript 扩展Ext.data.NodeInterface
我想在树面板中添加一个自定义对象作为treenode。 它将被用作Javascript 扩展Ext.data.NodeInterface,javascript,class,extjs4,prototypal-inheritance,Javascript,Class,Extjs4,Prototypal Inheritance,我想在树面板中添加一个自定义对象作为treenode。 它将被用作 var complex_object = {....} myTree.getRootNode().appendChild(new MyNode(complex_object)); 为了实现这样的功能,我发现Ext.data.NodeInterfacewhcih提供了一个到树节点的公共接口。所以我试着扩展它。这里是如何做到的 var MYNS = { TreeNode: new Ext.Class({
var complex_object = {....}
myTree.getRootNode().appendChild(new MyNode(complex_object));
为了实现这样的功能,我发现Ext.data.NodeInterface
whcih提供了一个到树节点的公共接口。所以我试着扩展它。这里是如何做到的
var MYNS = {
TreeNode: new Ext.Class({
protocol : "",
displayName : "",
extend: 'Ext.data.NodeInterface',
constructor : function(line) {
this.protocol = get_protocol(line);
this.displayName = get_display_name(line);
var configObj = {
id : this.protocol + "-" + this.displayName,
text : this.displayName,
leaf : true,
iconCls : protocol+"-user"
};
this.callParent([configObj]);
}
})
}
事实证明,这不会创建任何扩展类的Ext.data.NodeInterface
。但是,它创建的对象不能从其父对象开始运行
var a = new MYNS.TreeNode(...);
a.appendChild(); // throws error
我做错了吗?如何正确操作?
Ext.data.NodeInterface
是一个“工厂”,用于装饰Ext.data.Model
类的原型以及所需的属性/函数
此类用作应用于模型原型的一组方法,以使用节点API对其进行修饰。这意味着与树一起使用的模型将在模型上具有所有与树相关的方法
以下是您将如何使用它:
Ext.define('app.MyModel', {
extend: 'Ext.data.Model',
fields: [ /*...*/ ],
/*...*/
});
Ext.data.NodeInterface.decorate('app.MyModel'); // String will be resolved to Class object internally
var obj = Ext.ModelManager.create(parent, 'app.MyModel');
obj.appendChild(/*...*/);
中心方法是Ext.data.NodeInterface#decoration
-请参阅-这有助于#获取原型体
。这两种方法都是静态的。您可以重写getPrototypeBody
来操作类定义。
要让其他Ext类获取更改,您必须覆盖Ext.data.NodeInterface
,而不是扩展它
但是,,另一种方法是通过扩展
Ext.data.Model
来添加所需的功能-这实际上可能是满足您需求的更直接的方法。Ext.data.NodeInterface
是一个“工厂”,用于用属性/函数装饰Ext.data.Model
类的原型必需的
此类用作应用于模型原型的一组方法,以使用节点API对其进行修饰。这意味着与树一起使用的模型将在模型上具有所有与树相关的方法
以下是您将如何使用它:
Ext.define('app.MyModel', {
extend: 'Ext.data.Model',
fields: [ /*...*/ ],
/*...*/
});
Ext.data.NodeInterface.decorate('app.MyModel'); // String will be resolved to Class object internally
var obj = Ext.ModelManager.create(parent, 'app.MyModel');
obj.appendChild(/*...*/);
中心方法是Ext.data.NodeInterface#decoration
-请参阅-这有助于#获取原型体
。这两种方法都是静态的。您可以重写getPrototypeBody
来操作类定义。
要让其他Ext类获取更改,您必须覆盖Ext.data.NodeInterface
,而不是扩展它
但是,另一种方法是通过扩展
Ext.data.Model
来添加所需的功能-这实际上可能是满足您需求的更直接的方法。AFAIKExt.define
和new Ext.Class
是相同的。define
在这里有什么帮助?它说明了Ext.Class文档中的区别:Ext.define
和new Ext.Class
是不同的,但我同意这与这个问题不太相关。在进一步研究这个问题之后,问题似乎是另外一回事。我将更新我的答案。AFAIKExt.define
和new Ext.Class
是相同的。define
在这里有什么帮助?它说明了Ext.Class文档中的区别:Ext.define
和new Ext.Class
是不同的,但我同意这与这个问题不太相关。在进一步研究这个问题之后,问题似乎是另外一回事。我会更新我的答案。