我有一个使用localstorage数据源来存储大量记录的sencha touch 2 Web应用程序。
我能够很好地执行所有常规的crud操作,但我想使用webservice同步数据。如此定期,sencha应用程序将轮询Web服务进行数据更改,然后对我的sencha应用程序的localstorage数据源进行必要的更改。
我的方法是使用以下代码块每60秒运行一次同步过程:
var timerID = setInterval(function()
{
MyApp.app.BackgroundProcessingMain();
}, (60000));
在“BackgroundProcessingMain()”中,我有各种方法调用来同步各种数据存储(5)..
我调用webservice并获取我需要的数据,然后我的方法是循环返回的数据,将我的商店过滤到返回数据的当前项的id,然后删除它,或者更新如有必要。 这工作正常..但是,如果这个后台进程启动并且我正在查看绑定列表控件,我的列表使用我的数据源的过滤版本,突然下降到仅显示单个项目,通常是最后一个项目返回的数据需要同步,因为它是我的更新过程过滤商店以进行操作的最后一个数据。
我以为我可以使用store.findById,获取记录引用并以这种方式更新/删除,但是如果由于我的绑定列表需要的视图已经过滤掉特定ID,则在商店因此没有得到更新..
我希望能够做的是获取商店的临时副本,未经过滤,能够修改它,然后当我的应用程序在下次显示表单时查询本地存储时,它将获得新的更新数据..
这基本上就是我在标题中“静静地”所说的。
有没有人建议我可以采取什么程序来完成此更新.. ??
如果您有示例代码,那将是很棒的,但伪代码很好..
由于
答案 0 :(得分:0)
您可以使用suspendEvents()
和resumeEvents()
暂时阻止商店触发事件。然后,您可以清除过滤器,应用更新(使用store.findById()
),然后在不更改列表的情况下重新应用过滤器。
var store = Ext.getStore('myStore');
store.suspendEvents();
store.clearFilter();
doThings(...);
store.filter(myFilters);
store.resumeEvents();
如果您将true
传递给store.resumeEvents()
,则会丢弃缓冲的事件。