2009-10-15 2 views
7

Я хочу создать компонент Ext.tree.TreePanel и периодически загружать контент из внешнего URl. Так что я написал что-то вродеКак перезагрузить Ext.tree.TreePanel по запросу?

new Ext.tree.TreePanel({ 
     root: { 
      nodeType: 'async', 
      text: 'asdasd', 
      draggable: false, 
      id: 'folders-tree-root' 
     }, 
     loader: new Ext.tree.TreeLoader() 
}); 

А теперь я хочу, чтобы перезагрузить это дерево, так что я пишу:

tree.loader.dataUrl = 'folders-sample.json'; 
tree.root.reload(); 

И ничего не происходит.

добавить: Единственный способ я нашел, установить некоторые недопустимое значение dataUrl парам на TreeLoader создания:

new Ext.tree.TreePanel({ 
     root: { 
      nodeType: 'async', 
      text: 'asdasd', 
      draggable: false, 
      id: 'folders-tree-root' 
     }, 
     loader: new Ext.tree.TreeLoader(dataUrl: 'something') 
}); 

ответ

7

Что вы ищете является load метод TreeLoader. Так что что-то подобное должно работать с учетом вашего примера.

tree.getLoader().load(tree.root); 

Вот мой полный пример, который доступен на моем demo сайте, а также. Это немного надуманный и взломанный вместе с одной из демоверсий ExtJS, но он должен получить то, что вам нужно.

Ext.onReady(function() { 
    var root = new Ext.tree.AsyncTreeNode({ 
     text: 'Ext JS', 
     id: 'src' 
    }); 
    var reloadTree = function() { 
     tree.enable(); 
     tree.getLoader().dataUrl = 'get-nodes2.php'; 
     tree.getLoader().load(tree.root); 
    }; 

    var tree = new Ext.tree.TreePanel({ 
     animate: true, 
     autoScroll: true, 
     nodeType: 'async', 
     loader: new Ext.tree.TreeLoader(), 
     containerScroll: true, 
     border: false, 
     disabled: true, 
     id: 'myTree' 
    }); 

    var myPanel = new Ext.Panel({ 
     items: tree, 
     border: false, 
     tbar: [{ 
      text: 'Refresh', 
      handler: reloadTree 
     }] 
    }); 

    tree.setRootNode(root); 
    myPanel.render('tree'); 
}); 

Приветствия

+0

Я думаю, что ваш пример перестанет работать, когда вы удалите '{dataUrl: 'Get-nodes.php'}' от TreeLoader вызова конструктора. В моем случае я расширяю Ext.tree.TreePanel, но использую аналогичный код, и он не работает после удаления определения dataUrl: 'fake-url''. –

+0

Я обновил пример, чтобы не использовать значение dataUrl в конструкторе. Из-за этого я изначально отключил дерево, потому что у него нет данных. Нажмите кнопку обновления, дерево загрузится и включится. – rwilliams

Смежные вопросы