如何判断store.commit()在Ember.js中做了什么?

时间:2012-09-21 21:53:54

标签: ember.js

我在我的Ember应用程序中实现了一个定期自动保存功能,如下所示:

var App = Ember.Application.create({
    ready: function () {
        setInterval(function() { App.store.commit(); }, 10000);
    }
});

它运行良好,定期刷新服务器的所有更改。但是我如何能够参与到这个事件中,以便我可以直观地指出它正在发生在用户身上?

我不能只把它放在'ready'事件处理程序中,因为大多数时候App.store.commit()实际上都没有任何工作要做,即使它确实如此,它也是异步发生的 - commit( )在生成请求之前立即返回。

1 个答案:

答案 0 :(得分:3)

这是真的commit没有表明它的进展。设置didCreate&模型上的didUpdate回调会将更改通知注入您的应用。

Ember-Data事务模型的本质意味着在请求commit时会发生很多事情。您的回调通知可能需要合并或限制为合理的面向用户的消息。

DIY替代方案:创建一个isSaving属性& afterSave observer

在您的控制器上,使用计算属性&观察您观察isSaving州的特定数据模型:

// Example of a data model with a belongsTo association & nested hasMany
isSaving: function() {
  return this.get('isSaving') || (
    !Ember.empty(this.get('association')) && (
      this.get('association.isSaving') || 
        this.get('association.nestedAssociation').some(function(item) { return item.get('isSaving'); })
    )
  );
}.property("isSaving", "association.isSaving", "association.nestedAssociation.@each.isSaving"),

afterSave: function() {
  if (this.get('isSaving')) return;
  // do something interesting
}.observes('isSaving')

与ember-data中的通用全局isSavingisInFlight状态相比,这是一个脏点,但它在实践中效果很好。