1

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

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

它工作得很好,定期刷新服务器的所有更改。但是我如何才能挂钩事件,以便我可以直观地表明它正在发生在用户身上?

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

4

1 回答 1

3

的确如此,但这commit并不表明它的进展。在您的模型上设置didCreatedidUpdate回调以将更改通知注入您的应用程序。

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

DIY 替代方案:创建 isSaving 属性和 afterSave 观察者

在您的控制器上,使用计算属性和观察来观察您的特定数据模型的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状态相比,这有点脏,但在实践中效果很好。

于 2012-09-27T04:45:03.570 回答