2009-10-15 84 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

相關問題