我正在使用ember-data编辑具有自动模型分辨率的用户
this.route('user', function() {
this.route('edit', { path: ':user_id'})
});
此工作正常,用户可以修改模型DS.attribute
,DS.belongsTo
和DS.hasMany
的所有方面。
用户可以通过多种方式离开,在这种情况下,应从模型中删除所有更改。
Cancel
按钮Broswer Back
按钮Save
按钮,远程请求fails
,然后离开该页面。只有在用户通过单击Save
按钮明确要求更改并且服务器请求成功时才应用更改。
我考虑使用ember-buffered-proxy,但我不确定这将如何应对DS.belongsTo和DS.hasMany关系。无论如何,在保存模型之前,我需要在保存之前执行buffer.applyBufferedChanges();
,如果服务器出现故障,我将像以前一样处于保存状态。
路线中的willTransition
挂钩似乎是显而易见的地方,但我如何确保从模型中移除所有更改rollbackAttributes()
仅适用于DS.attribute
控件。< / p>
答案 0 :(得分:1)
尝试在路由的refresh()
操作挂钩中使用Ember.Route willTransition()
方法,如下所示:
action: {
willTransition() {
const unsavedModel = this.get('unsaved');
if (unsavedModel) {
this.refresh();
}
}
}
refresh()
方法可用于“使用与首次输入路径时相同的参数重新查询服务器以获取最新信息。”
我已经建议了一个名为unsaved
的标记,默认为true
,除非在成功false
之前的某个时刻设置为save
过渡。