0

ツリー パネルにカスタム オブジェクトをツリーノードとして追加したいと考えていました。として使用されます。

var complex_object = {....}
myTree.getRootNode().appendChild(new MyNode(complex_object));

そのような機能を実装するためExt.data.NodeInterfaceに、ツリーノードへの共通インターフェイスを提供するものを見つけました。というわけで伸ばしてみました。これがその方法です。

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。ただし、親から機能しないオブジェクト bud を作成します。

 var a = new MYNS.TreeNode(...);
 a.appendChild(); // throws error

私はそれを間違っていますか?どのように正しく行うのですか?

4

1 に答える 1

3

Ext.data.NodeInterfaceExt.data.Modelプロパティ/関数が必要なクラスのプロトタイプを装飾するための「ファクトリ」です。

このクラスは、Model のプロトタイプに Node 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#decorateを参照-内部的に容易になります。これらは両方とも静的メソッドです。クラス定義を操作するためにオーバーライドできます。他の Ext クラスが変更を反映するには、拡張する代わりにオーバーライドする必要があります。#getPrototypeBodygetPrototypeBody Ext.data.NodeInterface

ただし、別のアプローチは、拡張Ext.data.Modelによって必要な機能を追加することです。これは実際には、要件に対するより単純なアプローチである可能性があります。

于 2012-09-13T16:55:48.740 に答える