4

ExtJS 4.0.7 TreePanel に問題があります。JSON リクエストから完全なツリーをロードしたいと思います。リクエストは次を返します。

{
  "data": {
    "children": [
      {
        "text": "OS",
        "leaf": false,
        "children": [
          {
            "text": "Hostname",
            "leaf": false,
            "children": [
              {
                "text": "hostname.int.com",
                "leaf": true,
                "children": []
              }
            ]
          }
        ]
      }
    ]
  }
}

次のストア構成(または私が試した他の構成)では機能しません

Ext.define('My.store.SysInfo', {
extend: 'Ext.data.TreeStore',
    model: 'My.model.SysInfo',

    proxy : {
        type : 'ajax',
        url : '/sysinfo/getSysInfo.php',
        reader : {
            root : 'data'
        }
    }
});

モデルには次のコードがあります。

Ext.define('My.model.SysInfo', {
    extend: 'Ext.data.Model',
    fields: ['text']
});

この構成でツリーパネルを追加すると、機能しません:

{
    xtype: 'treepanel',
    name : 'sysinfo',
    height: '100%',
    store: 'My.store.SysInfo',
    lines: true,
    autoScroll : true,
    expanded : true,
    rootVisible: false,
    folderSort: true,
    multiSelect: false,
    useArrows: true,
}

ノードを開くことにより、ExtJS は、プリロードされたデータを表示する代わりに、ajax を介してリクエストすることにより、常にルート ノードからサブノードにツリー全体をロードします。「OS」を開いて「ホスト名」ノードをロードするにはどうすればよいですか?

4

1 に答える 1

6

あなたは間違いなくそれを行うことができます。しかし、あなたのjsonに問題があるようです。

json のルートは ですdataが、ネストされたデータを正しくロードするには、ルートとすべての子プロパティが同じである必要があります。リーダーのルートを として定義したので、json 内のdataすべてを に置き換える必要があります。childrendata

この質問を見てください。すべてをより深く理解したい場合は、この質問も見てください。この動作中の JsFiddleもご覧ください。

リーダーを次のように定義すると:

    reader : {
        type: 'json',
        // root : 'children' // no real need for this a children is the default.
    }

この json は正しく読み込まれます。

{
  "children":[
     {
        "text":"OS",
        "leaf":false,
        "children":[
           {
              "text":"Hostname",
              "leaf":false,
              "children":[
                 {
                    "text":"hostname.int.com",
                    "leaf":true,
                    "children":[

                    ]
                 }
              ]
           }
        ]
     }
  ]
}
于 2012-08-30T16:34:30.573 に答える