2010-09-30 2 views
1

Я не слишком знаком с ExtJS, но я работаю над проектом, который его использует.ExtJS TreeLoader Issue

Мы используем TreePanel с TreeLoader, который загружает все данные узла с сервера за один вызов. У нас есть событие, в котором мне нужно получить доступ к атрибутам каждого узла в дереве. Способ, которым я это делаю, - использовать метод getNodeById TreePanel. Проблема в том, что панель дерева, похоже, лениво загружает узлы и не сможет получить узел с getNodeById, если узел уже не загружен.

Есть ли способ заставить все узлы загружаться? Самое близкое, что я пришел, - это использовать атрибут preloadChildren для TreeLoader, но он по-прежнему загружается только при загрузке родительского узла, содержащего детей.

ответ

2

Если вы хотите иметь доступ ко всем узлам, вы должны загрузить полную древовидную структуру при первом вызове.

Ответ JSON на первый вызов должен включать в себя все узлы дерева. Например:

[{ 
    id: 1, 
    text: 'A leaf Node', 
    leaf: true 
},{ 
    id: 2, 
    text: 'A folder Node', 
    children: [{ 
     id: 3, 
     text: 'A child Node', 
     leaf: true 
    }] 

}]

+0

Хм, это довольно много, как у нас это есть. Используя ваш пример, если я сделаю myTreePanel.getNodeById (3), он предоставит мне неопределенное значение, если только я не заставляю его загружать, расширив его родительский элемент (или щелкнув его родительский элемент с параметром preloadChildren, установленным в true в конфигурации загрузчика). –

+0

Да, используя свои данные, я попытался следующие, который не работает: Var TreePanel = новые Ext.tree.TreePanel ({ ID: 'структура панели', погрузчик: новый Ext.tree.TreeLoader ({ dataUrl: 'data.html', preloadChildren: истинные, слушателей: { нагрузка: функция() { оповещения (treePanel.getNodeById ('3'));} }} ), корень : new Ext.tree.TreeNode ({ id: 'tree-root' }) }); treePanel.getLoader(). Load (treePanel.root); Предупреждение в обратном вызове загрузки будет иметь «undefined» –

+0

Не могли бы вы отправить пример кода и пример ответа сервера с узлами? Благодарю. – ncardeli