Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 扩展Ext.data.NodeInterface_Javascript_Class_Extjs4_Prototypal Inheritance - Fatal编程技术网

Javascript 扩展Ext.data.NodeInterface

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({

我想在树面板中添加一个自定义对象作为treenode。 它将被用作

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
来添加所需的功能-这实际上可能是满足您需求的更直接的方法。

AFAIK
Ext.define
new Ext.Class
是相同的。
define
在这里有什么帮助?它说明了Ext.Class文档中的区别:
Ext.define
new Ext.Class
是不同的,但我同意这与这个问题不太相关。在进一步研究这个问题之后,问题似乎是另外一回事。我将更新我的答案。AFAIK
Ext.define
new Ext.Class
是相同的。
define
在这里有什么帮助?它说明了Ext.Class文档中的区别:
Ext.define
new Ext.Class
是不同的,但我同意这与这个问题不太相关。在进一步研究这个问题之后,问题似乎是另外一回事。我会更新我的答案。