Sencha Touch 2 - “静静地”删除并更新localstorage中的记录

时间:2013-06-15 14:07:36

标签: sencha-touch-2

我有一个使用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,则在商店因此没有得到更新..

我希望能够做的是获取商店的临时副本,未经过滤,能够修改它,然后当我的应用程序在下次显示表单时查询本地存储时,它将获得新的更新数据..

这基本上就是我在标题中“静静地”所说的。

有没有人建议我可以采取什么程序来完成此更新.. ??

如果您有示例代码,那将是很棒的,但伪代码很好..

由于

1 个答案:

答案 0 :(得分:0)

您可以使用suspendEvents()resumeEvents()暂时阻止商店触发事件。然后,您可以清除过滤器,应用更新(使用store.findById()),然后在不更改列表的情况下重新应用过滤器。

var store = Ext.getStore('myStore');
store.suspendEvents();
store.clearFilter();
doThings(...);
store.filter(myFilters);
store.resumeEvents();

如果您将true传递给store.resumeEvents(),则会丢弃缓冲的事件。