如何重新加载TreeStore?

时间:2011-08-23 13:26:16

标签: extjs sencha-touch

我有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()方法。

请帮帮我。

5 个答案:

答案 0 :(得分:9)

这对我有用。我正在使用MVC,这个代码在我的控制器中调用。

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

答案 1 :(得分:1)

if (isset($_POST['submitCouponCode'])) {
    $coupon = $_POST['couponCode'];
    if ($coupon == '10offbook') {
        header('Location: books.php');
        exit;
    } else if ($coupon == '10offmagazine') {
        header('Location: magazine.php');
        exit;
    }
}

答案 2 :(得分:0)

TreePanel没有像JsonStore这样的商店。它会自动显示所有节点,并在需要时重新加载。

如果您的rootNode(rightPaneStoreData)是AsyncTreeNode(通过AJAX加载),您可以使用:

rightPaneStoreData.reload()
(因为rightPaneStoreData是您的根节点)。

或者(更通用):
tree.root.reload();
(其中树是对树的引用)

如果不是ASyncTreeNode,则必须手动执行。 再次调用getFolderListData()函数,并将新根分配给树。 (tree.setRootNode()

答案 3 :(得分:0)

您可以使用内存代理重新加载树。请参阅How to update the Nested List/Tree Store in Sencha Touch?

中的答案

答案 4 :(得分: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
  }
});