为啥 Sencha Touch 没有同步回调?
Posted
技术标签:
【中文标题】为啥 Sencha Touch 没有同步回调?【英文标题】:Why is there no sync callback in Sencha Touch?为什么 Sencha Touch 没有同步回调? 【发布时间】:2012-12-23 19:32:09 【问题描述】:我希望能够在商店同步成功完成后向用户显示一条消息。但是,似乎没有任何方法可以使用回调或同步调用它。我有点惊讶这不是开箱即用的,因为它一定是一个常见问题。
有什么解决办法吗?
【问题讨论】:
如果不出意外,您可以覆盖sync()
并且可能还覆盖代理的 batch()
,以在其中获取同步事件。如果您查看代码,就提供同步事件而言,这可能是“ehhhhhh,这变得越来越复杂,搞砸了”的情况。因为同步必须等待所有批处理操作完成。
如果同步的是一条记录(例如用户的联系方式)怎么办?用户在没有真正成功的情况下继续操作是否安全?对我来说,批处理操作不太可能在我的应用中使用。
批处理的东西在那里,因为同步更新被删除,新的和改变的。因此,它发出了代理一起批处理的三个操作。如果您只关心一条记录,那么Model.load()
可能会更好。
好的,谢谢。所以这可能就是为什么 model.load 有一个回调函数。如果您添加答案,我会将其标记为正确。
成功回调的简单解决方案示例***.com/a/27473830/1199820
【参考方案1】:
我们花了很长时间才找到合适的解决方案。最后,我们在商店的 write 事件中添加了监听器,似乎工作正常。由于经常需要它,因此已将其添加到商店原型中
Ext.data.Store.prototype.syncWithListener = function(onWriteComplete, syncMethod)
this.on('write', onWriteComplete, this, single:true);
var syncResult = syncMethod ? syncMethod.apply(this) : this.sync();
if (syncResult.added.length === 0 &&
syncResult.updated.length === 0 &&
syncResult.removed.length === 0)
this.removeListener('write', onWriteComplete, this, single:true);
onWriteComplete(this);
return syncResult;
;
【讨论】:
应该提一下,这不是 Ext 的callback
的替代品,而只是success
的替代品。以上是关于为啥 Sencha Touch 没有同步回调?的主要内容,如果未能解决你的问题,请参考以下文章