我正在寻找Ember.JS中的最佳实践来修复以下场景:
- 用户点击挑战链接。
- 系统显示挑战列表。
- 用户点击编辑挑战按钮。
- 显示编辑挑战表单。
- 用户更新挑战名。
- 用户点击联赛链接,不保存挑战。
- 系统显示联赛列表。
- 用户点击挑战链接。
- 系统显示更新后的挑战列表。
这个问题的发生是因为我所有的文本字段都直接绑定到挑战模型,因为模型在你输入的时候就会更新,它会更新所有路由上的文本。我在编辑表单上有一个取消按钮,我在模型上执行this.get('model').rollback()来取消编辑。但是,如果你开始在页面的不同位置执行回滚操作,那么这会变得很混乱。
我想解决这个问题的方法是将表单字段绑定到控制器属性,并在每个路由上将模型属性复制到setupController钩子上的控制器属性。这将防止编辑影响其他路由。
我想知道这是十一月的最佳实践,还是有更好的方法来解决这个问题?
谢谢
可以在deactivate
路由钩子中使用单回滚。然后在cancel
操作中,您只能进行转换。
// edit challenge route
model(params) {
...
},
deactivate() {
this.modelFor( this.get('routeName')).rollback();
}
PS你知道rollback()
在ED 2.0中仍然不能正常工作并减少到rollbackAttributes()
吗?
相关链接:https://github.com/emberjs/data/issues/2122https://github.com/emberjs/data/issues/3273 issuecomment - 110965145