1

我有一个 sencha touch 2 Web 应用程序,它使用本地存储数据源来存储一堆记录。

我能够很好地执行所有常见的 crud 操作,但我想使用 web 服务同步数据。因此,sencha 应用程序将定期轮询 web 服务以获取数据更改,然后对我的 sencha 应用程序的本地存储数据源进行必要的更改。

我的方法是使用以下代码块每 60 秒运行一次同步过程:

var timerID = setInterval(function()
{
    MyApp.app.BackgroundProcessingMain();
}, (60000));

在“BackgroundProcessingMain()”中,我有各种方法调用来同步各种数据存储 (5)..

我调用 web 服务并取回我需要的数据,然后我的方法是遍历返回的数据,将我的存储过滤到返回数据的当前项的 id,然后删除它,或者根据需要更新它. 这很好.. 但是,如果这个后台进程启动并且我正在查看一个绑定列表控件,我的列表使用我的数据源的过滤版本,突然下降到只显示一个项目,通常是最后一个需要同步的返回数据,因为它是我的更新过程过滤存储以操作的最后一个数据。

我以为我可以使用 store.findById,获取记录引用并以这种方式更新/删除,但是如果由于我的绑定列表需要的视图已经过滤掉了特定 ID,则在商店中找不到记录,因此不更新了。。

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

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

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

如果你有示例代码,那就太棒了,但伪代码很好..

谢谢

4

1 回答 1

0

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

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

如果传入truestore.resumeEvents()缓冲的事件将被丢弃。

于 2016-07-29T14:08:28.673 回答