2011-08-23 131 views
5

我有與treestore嵌套列表。首次加載時,商店加載完美,並根據商店顯示列表。當我點擊刷新按鈕時,我的treestore應該重新加載新數據(使用與第一次相同的數據模型)並且嵌套列表也需要重新加載新的數據集。如何重新加載TreeStore?

下面是我treestore定義

rightPaneStoreData = getFolderListData(); 

rightPaneStore =new Ext.data.TreeStore({ 

    autoLoad:false, 

    model: 'FIMT.models.rightPaneModel', 

    root: rightPaneStoreData, 
    proxy: { 

    type: 'memory', 

    reader: { 

     type: 'tree', 
     root: 'items' 
     } 

    }, 
    listeners: { 
     datachanged: function(records){ 
      alert("datachanged"); 
      } 
    } 

    }); 

rightPaneStore.load(); 

在Ext.data.JsonStore的實踐例子我已經完成了相同的使用store.loaddata()方法。但我無法找到TreeStore的loaddata()方法。

請幫助我。

回答

0

TreePanel沒有像JsonStore這樣的商店。它會自動顯示所有節點,並在需要時重新加載。

如果你的根節點(rightPaneStoreData)是AsyncTreeNode(通過AJAX加載),您可以使用:

rightPaneStoreData.reload()
(因爲rightPaneStoreData是你的根節點)。

或可替代(更通用):
tree.root.reload();
(其中樹是參考你的樹)

如果它不是一個ASyncTreeNode,你必須做手工。 再次調用您的getFolderListData()函數,並將新的根分配給樹。 (tree.setRootNode()

+0

上述建議的兩段代碼沒有工作對我來說 – shatthi

+0

是否有您的控制檯上的錯誤? (Chrome Devtools/Firefox Firebug?) –

+0

是在Chrome中,它表示reload()不適用於我的rightpanestoredata參考和樹庫參考。 – shatthi

9

這對我有用。我正在使用MVC,並在我的控制器中調用此代碼。

treeStore.getRootNode().removeAll(); 
treeStore.load(); 
+0

treeStore.getRootNode()。removeAll();是我確實需要的,以避免treeStore.load()時爲每個節點進行同時發生的ajax調用。被稱爲 –

+0

這是行得通的,但是,你是否知道爲什麼它花費太多時間從我的樹庫中刪除記錄 – Dibish

0
treeStore.getRootNode().removeAll(); 
treeStore.setRootNode({ 
    id: rootNodeId, 
    text: 'root' 
    // other configs in root 
}); 
// if you had non-standard children loads, then you would need to call: 
treeStore.getProxy().load(); 
// if you had non-standard children loads, and you had params in your load, then you would need to call: 
treeStore.getProxy().load({ 
    params: { 
    node: rootNodeId 
    } 
}); 
0
// Remove all current children if clear on load not set 
if (!treeStore.clearOnLoad) { 
    record.removeAll(); 
} 

// Call load, refreshing our view when done... 
var viewRefresher = function() { 
    view.refresh(); 
}; 

treeStore.load({ 
    node: record, 
    callback: viewRefresher 
});