将所有更改回滚到Ember数据模型的最佳方法

时间:2016-04-28 01:20:43

标签: ember.js ember-data

我正在使用ember-data编辑具有自动模型分辨率的用户

this.route('user', function() {
  this.route('edit', { path: ':user_id'})
});

此工作正常,用户可以修改模型DS.attributeDS.belongsToDS.hasMany的所有方面。

用户可以通过多种方式离开,在这种情况下,应从模型中删除所有更改。

  • 点击Cancel按钮
  • 点击Broswer Back按钮
  • 点击Save按钮,远程请求fails,然后离开该页面。
  • 只需点击页面上的其他链接即可将其带到其他地方。

只有在用户通过单击Save按钮明确要求更改并且服务器请求成功时才应用更改。

我考虑使用ember-buffered-proxy,但我不确定这将如何应对DS.belongsTo和DS.hasMany关系。无论如何,在保存模型之前,我需要在保存之前执行buffer.applyBufferedChanges();,如果服务器出现故障,我将像以前一样处于保存状态。

路线中的willTransition挂钩似乎是显而易见的地方,但我如何确保从模型中移除所有更改rollbackAttributes()仅适用于DS.attribute控件。< / p>

1 个答案:

答案 0 :(得分:1)

尝试在路由的refresh()操作挂钩中使用Ember.Route willTransition()方法,如下所示:

action: {
  willTransition() {
    const unsavedModel = this.get('unsaved');
    if (unsavedModel) {
      this.refresh();
    }
  }
}

refresh()方法可用于“使用与首次输入路径时相同的参数重新查询服务器以获取最新信息。”

我已经建议了一个名为unsaved的标记,默认为true,除非在成功false之前的某个时刻设置为save过渡。