【问题标题】:How to reload TreeStore?如何重新加载 TreeStore?
【发布时间】:2011-08-23 13:26:15
【问题描述】:

我有带有树存储的嵌套列表。在第一次加载商店时完美加载,并根据商店显示列表。当我点击刷新按钮时,我的树存储应该重新加载新数据(与第一次使用相同的数据模型)并且嵌套列表也需要重新加载新数据集。

下面是我的树库定义

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

请帮助我。

【问题讨论】:

    标签: extjs sencha-touch


    【解决方案1】:

    这对我有用。我正在使用 MVC,并且在我的控制器中调用了此代码。

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

    【讨论】:

    • treeStore.getRootNode().removeAll();为了避免在 treeStore.load(); 时对每个节点同时进行 ajax 调用,这是我真正需要的。被称为
    • 这是有效的,但是,你知道为什么从我的树存储中删除记录需要太多时间
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 您的控制台有错误吗? (Chrome Devtools / Firefox Firebug?)
    • 是的,在 chrome 中,它说 reload() 不适用于我的 rightpanestoredata 参考和 treestore 参考。
    • 我自动猜到您我们使用的是基于 AJAX 的树 (ASyncTreeNode)。如果您在客户端手动创建树(而不是通过dataUrl),您也必须手动更新/重新加载树。
    • S,我没有从 url 加载数据存储。我手动加载树存储。请给我示例如何手动更新或重新加载树存储。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      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
        }
      });
      

      【讨论】:

        【解决方案5】:
        // 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 
        });  
        

        【讨论】:

          猜你喜欢
          • 2012-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-07
          • 2012-07-08
          • 1970-01-01
          相关资源
          最近更新 更多