2011-08-23 90 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 
});