Sencha touch Sencha Touch:在代理URL更改后重新加载嵌套列表和树存储

Sencha touch Sencha Touch:在代理URL更改后重新加载嵌套列表和树存储,sencha-touch,Sencha Touch,我有一个使用NestedList和TreeStore的应用程序。TreeStore使用AJAX类型的代理和XML读取器。现在我已经实现了设置页面,您可以在其中更改用作数据源的URL。更改后,应用程序需要“重新加载”。因此,我更改了代理URL: App.tree\u store.proxy.url=new\u url 然后我想加载一个新数据: App.tree_store.load(); 当我将NestedList切换到根卡时,它将包含来自先前配置和当前配置的混合数据: App.views.hd

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

App.tree\u store.proxy.url=new\u url

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

App.tree_store.load();
当我将NestedList切换到根卡时,它将包含来自先前配置和当前配置的混合数据:

App.views.hdTreeView.setActiveItem(0);
问题:在加载全新数据(相同的数据模型)之前,我应该如何“清除/重置”嵌套列表?我是否也必须清除树存储/子存储和代理,如果是,如何清除?可能使用destroy()方法重新创建新组件

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


谢谢

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

nestedListObject.bindStore(store.load())

其中,
nestedListObject
是嵌套列表

 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


所以你可以只使用一个url,而chnage just param来获取数据。

我尝试了一种肮脏的解决方案:加载新数据后,只要集合中只剩下一项,我就调用
onBackTap()
App.views.hdTreeView.items
对不起,但是NestedList没有bindStore()方法。或者我误解了什么?创建新的代理对象与更改URL是否会有所不同?无论如何,我使用我的循环返回根列表
while(HdMobile.views.hdTreeView.items.length>1){App.views.hdTreeView.onBackTap();}
据我所知,是树存储实际上保留了旧数据,而不是代理,所以我可以使用一种“flush”方法,还是由“clearOnLoad”处理?这会删除所有以前存在的项还是只删除子树?只是澄清一下:bindStore()方法仅在Ext.List而不是NestedList中可用。不幸的是,即使创建新存储和新代理并使用Load()也无法重新加载NestedList。NestedList没有触发加载事件(我认为这是一个已确认的错误…),我认为问题在于NestedList本身没有“重新绘制”。因此,即使存储中没有元素或元素已更改,实际的HTML也不会更新。我对你的根列表循环有点困惑。我不明白你想用它做什么,但无论如何,我认为最好是销毁旧列表,用更新的存储创建一个新列表。