ExtJS4 How to set TreePanels root node from JSON

守給你的承諾、 提交于 2019-12-20 02:57:03

问题


I want to create TreePanel using ExtJS4. So I'm sending JSON to proxy reader which has following format

{
    "text": "en",
    "children": {
        "text": "/",
        "children": [{
                "text": "/page",
                "children": [{
                        "text": "/page/new",
                        "children": [],
                        "leaf": true,
                        "expanded": false
                    },
                    {
                        "text": "/page/remove",
                        "children": [],
                        "leaf": true,
                        "expanded": false
                    }
                ],
                "leaf": false,
                "expanded": false
            },
            {
                "text": "/home",
                "children": [],
                "leaf": true,
                "expanded": false
            }
        ],
        "leaf": false,
        "expanded": true
    }
}

How do I have to configure my Store if I want en node to be my root node.

Ext.define('Example.store.WebItems', {
    extend: 'Ext.data.TreeStore',

    model: 'Example.model.Item',

    proxy: {
        type: 'ajax',
        api: {
            read: 'some/url',
        },
        reader: {
            type: 'json',
            root: 'children' // Is this correct?
        }
    },
    root: // What should I write here?
});

When I define TreeStore's root as root: 'My Root' it will add new root, but I want to use root defined in JSON.

So my questions are:

  1. How to use root node from JSON instead of defining it manualy?
  2. Do I have to define root node in proxy reader and TreeStore as well?

回答1:


Response has to have root.

For example:

{
     MyRoot: {
         "text": "en",
         "children": {
             "text": "/",
             "children": [{
                 "text": "/page",
                 "children": [{
                     "text": "/page/new",
                     "children": [],
                     "leaf": true,
                     "expanded": false
                 }, {
                     "text": "/page/remove",
                     "children": [],
                     "leaf": true,
                     "expanded": false
                 }],
                 "leaf": false,
                 "expanded": false
             }, {
                 "text": "/home",
                 "children": [],
                 "leaf": true,
                 "expanded": false
             }],
             "leaf": false,
             "expanded": true
         }
     }
 }

In this example root is MyRoot. Now you have to "tell" reader that your root is MyRoot:

        // ...
        reader: {
            type: 'json',
            root: 'MyRoot'
        }
    },
    //root: this config is not needed now
});



回答2:


As per I know, you need to specify root as following:

root: {
    text: 'en',
    id: 'src',
    expanded: true '
}

Try the above code snippet it will help you.




回答3:


May be late but for others , wrap the JSON inside array [] just like this :

[{
    "text": "en",
    "children": {
        "text": "/",
        "children": [{
            "text": "/page",
            "children": [{
                "text": "/page/new",
                "children": [],
                "leaf": true,
                "expanded": false
            }, {
                "text": "/page/remove",
                "children": [],
                "leaf": true,
                "expanded": false
            }],
            "leaf": false,
            "expanded": false
        }, {
            "text": "/home",
            "children": [],
            "leaf": true,
            "expanded": false
        }],
        "leaf": false,
        "expanded": true
    }
}]

Remove the reader block

reader: {
    type: 'json',
    root: 'MyRoot'
}

Add root block :

root: {
    text: 'en',
    id: 'src',
    expanded: true '
}

Add rootVisible: false in treepanel.



来源:https://stackoverflow.com/questions/6957485/extjs4-how-to-set-treepanels-root-node-from-json

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!