在高延迟网络下使用Ember Data时的奇怪行为

时间:2015-02-26 19:28:36

标签: javascript ember.js ember-data

保存我的Ember数据模型会导致数据存储从服务器的响应中更新记录。

对于大多数情况,此功能是预期的,并且完美地运行。但是,我遇到了如果服务器响应很慢的情况,那么保存后修改的任何字段现在都会重置。

我们需要“节省输入模糊”,因此我重新打开了一些内置视图助手,将“保存”事件发送到当前控制器。例如:

Ember.Select.reopen(Ember.TargetActionSupport, {
  _sendSave: function() {
    this.triggerAction({
      action: 'save',
      target: this.get('controller')
    });
  }.on('change')
});

至于我目前的解决方案,我只是限制了save行动:

save: function() {
  Ember.run.throttle(this, this._save, 5000); // saves the model if `isDirty`
}

我想知道是否有人对最佳处理方式有任何想法?我的团队提到的一个解决方案是不同步传入响应中的数据。我认为这不是一个好主意,我宁愿将当前记录合并到响应的记录中。如果需要进一步说明,请告诉我。

1 个答案:

答案 0 :(得分:1)

我最终修改了adapterDidCommit钩子,将当前数据与服务器数据合并。

此处解释了一个解决方案: How do I save data to my Ember store if the POST response contains only an id?

adapterDidCommit: function() {
  var currentData = this.toJSON();

  this._super.apply(this, arguments);

  Ember.merge(this._data, currentData);
}