为啥 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 没有同步回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sencha Touch 中的商店之间同步

Sencha Touch 存储同步

Sencha Touch 同步并从服务器获取新数据

为啥 Sencha Touch cmd 中没有视图构建

CRUD & JsonP / Sencha Touch 2

Sencha Touch JsonP 回调无法识别 Ext 对象