【问题标题】:Sencha Touch: Reload NestedList and TreeStore after proxy URL changeSencha Touch:代理 URL 更改后重新加载 NestedList 和 TreeStore
【发布时间】:2012-10-22 12:10:19
【问题描述】:

我有一个将 NestedList 与 TreeStore 结合使用的应用程序。 TreeStore 使用 AJAX 类型代理和 XML 阅读器。现在我已经实现了设置页面,您可以在其中更改用作数据源的 URL。更改后应用程序需要“重新加载”。结果,我更改了代理 URL:

App.tree_store.proxy.url = new_url;

然后我想加载一个新数据:

App.tree_store.load();

当我将 NestedList 切换到根卡时,它将包含来自先前配置和当前配置的混合数据:

App.views.hdTreeView.setActiveItem(0);

问题:在加载全新数据(相同数据模型)之前,我应该如何“清除/重置”NestedList?我是否也必须清除 TreeStore / SubStores 和 Proxy,如果是,如何?也许使用 destroy() 方法并重新创建新组件?

如果我使用 removeAll() 删除所有列表,然后重新加载存储,则不会创建新列表。

谢谢!

【问题讨论】:

  • 我尝试过一种肮脏的解决方案:加载新数据后,只要此集合中只剩下一项,我就会调用onBackTap()App.views.hdTreeView.items

标签: sencha-touch


【解决方案1】:
 showDetail: function(list, index , element , record) {
            //Take your store
            var store = Ext.getStore('yourstore');

            //Apply the params
            Ext.apply(store.getProxy()._extraParams, {
                id : record.data.id
            });

            //Reload your store
            store.load();
}

将此代码放在控制器中

只需更改 extraParams 即可获取新数据。

店内不要输入exterparam

所以你 cab 只使用一个 url 但只更改参数以获取数据。

【讨论】:

    【解决方案2】:

    首先使用store.setProxy() 并传递新的代理对象,然后使用这个:

    nestedListObject.bindStore(store.load());

    nestedListObject 是您的嵌套列表。

    【讨论】:

    • 抱歉,NestedList 没有 bindStore() 方法。还是我误会了什么?
    • 实际上创建新的代理对象与更改 URL 有什么不同吗?无论如何,我使用我的循环回到根列表while(HdMobile.views.hdTreeView.items.length > 1){ App.views.hdTreeView.onBackTap();}
    • 据我了解,实际上保留旧数据而不是代理的是TreeStore,所以我可以使用一种“刷新”方法还是由“clearOnLoad”处理?这会删除所有以前存在的项目还是只删除子树?
    • 澄清一下:bindStore() 方法仅适用于 Ext.List 而不是 NestedList。不幸的是,即使创建新商店和新代理并使用 Load() 也不会重新加载 NestedList。 NestedList 不会触发 Load 事件(我认为这是一个已确认的错误...)
    • 我认为问题在于嵌套列表本身不会“重新绘制”。因此,即使您在商店中没有元素或元素已更改,实际的 HTML 也不会更新。我对你的循环与根列表等有点困惑。我不明白你想用它做什么,但无论如何我认为最好销毁旧列表并使用更新的商店创建一个新列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    相关资源
    最近更新 更多