2009-10-15 82 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 PARAM的唯一方法上TreeLoader创作:

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

回答

7

什么你要找的是为TreeLoader的load方法。所以像这样的东西应该适用于你的例子。

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''定义后不起作用。 – 2009-10-21 11:18:17

+0

我更新了示例以在构造函数中不使用dataUrl值。正因为如此,我最初禁用了树,因为它没有数据。单击刷新按钮,树会加载并启用。 – rwilliams 2009-10-21 17:10:52

相关问题