ExtJS4 Как установить корневой узел TreePanels из JSON - PullRequest
3 голосов
/ 05 августа 2011

Я хочу создать TreePanel, используя ExtJS4. Поэтому я отправляю JSON в прокси-ридер, который имеет следующий формат

{
    "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
    }
}

Как мне настроить мой Магазин, если я хочу, чтобы en узел был моим корневым узлом.

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?
});

Когда я определяю корень TreeStore как root: 'My Root', он добавит новый корень, но я хочу использовать корень, определенный в JSON.

Итак, мои вопросы:

  1. Как использовать корневой узел из JSON вместо определения его вручную?
  2. Нужно ли определять корневой узел в прокси-ридере и TreeStore?

Ответы [ 3 ]

5 голосов
/ 05 августа 2011

Ответ должен иметь root.

Например:

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

В этом примере root равно MyRoot.Теперь вы должны «сказать» читателю, что ваш root равен MyRoot:

        // ...
        reader: {
            type: 'json',
            root: 'MyRoot'
        }
    },
    //root: this config is not needed now
});
1 голос
/ 05 августа 2011

Насколько я знаю, вам нужно указать root следующим образом:

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

Попробуйте приведенный выше фрагмент кода, он вам поможет.

0 голосов
/ 29 мая 2015

Может быть поздно, но для других, обернуть JSON внутри массива [] так:

[{
    "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
    }
}]

Снять блок считывателя

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

Добавить корневой блок:

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

Добавить rootVisible: false в treepanel.

...