1

以下のようなJSONデータを持っています。

{
    "divisions": [{
        "name": "division1",
        "id": "div1",
        "subdivisions": [{
            "name": "Sub1Div1",
            "id": "div1sub1",
            "schemes": [{
                "name": "Scheme1",
                "id": "scheme1"
            }, {
                "name": "Scheme2",
                "id": "scheme2"
            }]
        }, {
            "name": "Sub2Div1",
            "id": "div1sub2",
            "schemes": [{
                "name": "Scheme3",
                "id": "scheme3"
            }]
        }

        ]
    }]
}

これを TreeStore に読み込みたいのですが、サブフィールド ( divisionssubdivisionsschemes) を同じ ( など) に変更できませんchildren

どうすればこれを達成できますか?

4

1 に答える 1

7

ネストされた JSON が TreeStore に読み込まれると、基本的に、TreeStore.fillNode()メソッドとの間の再帰呼び出しによって子ノードが読み込まれNodeInterface.appendChild()ます。

各ノードの子フィールドの実際の取得は、次のTreeStore.onNodeAdded()行で行われます。

dataRoot = reader.getRoot(data);

リーダーのgetRoot()は、リーダーのbuildExtractors()メソッドで動的に作成されます。これは、ネストされた JSON 内のさまざまな子フィールドを処理するためにオーバーライドする必要があるものです。方法は次のとおりです。

Ext.define('MyVariJsonReader', {
    extend: 'Ext.data.reader.Json',
    alias : 'reader.varijson',

    buildExtractors : function()
    {
        var me = this;    
        me.callParent(arguments);

        me.getRoot = function ( aObj ) {                
            // Special cases
            switch( aObj.name )
            {
                case 'Bill':   return aObj[ 'children' ];
                case 'Norman': return aObj[ 'sons' ];                    
            }

            // Default root is `people`
            return aObj[ 'people' ];
        };
    }
});

これにより、そのような JSON を解釈できるようになります。

{
   "people":[
      {
         "name":"Bill",
         "expanded":true,
         "children":[
            {
               "name":"Kate",
               "leaf":true
            },
            {
               "name":"John",
               "leaf":true
            }
         ]
      },
      {
         "name":"Norman",
         "expanded":true,
         "sons":[
            {
               "name":"Mike",
               "leaf":true
            },
            {
               "name":"Harry",
               "leaf":true
            }
         ]
      }
   ]
}

完全に機能するコードについては、この JsFiddleを参照してください。

于 2012-08-23T13:39:04.447 に答える