【问题标题】:Ember.JS Best Practice: Model vs Controller field bindingEmber.JS 最佳实践:模型与控制器字段绑定
【发布时间】:2015-10-09 17:20:08
【问题描述】:

我正在寻找 Ember.JS 中的最佳实践来解决以下情况:

  1. 用户点击挑战链接。
  2. 系统显示挑战列表。
  3. 用户点击编辑挑战按钮。
  4. 系统显示编辑挑战表单。
  5. 用户更新挑战名称。
  6. 用户点击leagues链接而不保存挑战。
  7. 系统显示联赛列表。
  8. 用户点击挑战链接。
  9. 系统显示挑战列表以及更新的挑战名称。

之所以出现此问题,是因为我的所有文本字段都直接绑定到挑战模型,并且模型在您键入后立即更新,它会更新所有路线上的文本。我在编辑表单上有一个取消按钮,我在模型上执行 this.get('model').rollback() 以取消编辑。但是,如果您开始在可以单击的页面上的不同位置进行回滚,这会变得很混乱。

我正在考虑解决此问题的方法是将表单字段绑定到控制器属性,并在每个路由上将模型属性复制到 setupController 挂钩上的控制器属性。这将防止编辑影响其他路线。

我想知道这是 ember 中的最佳做法还是有更好的方法来解决这个问题?

谢谢

【问题讨论】:

  • 还有其他方法,但在一个地方进行回滚应该已经足够好了,很可能是willTransition钩子。
  • 有些人通过创建记录副本来解决它,然后把它扔掉而不是回滚。还需要注意的是,回滚只会回滚属性,不会回滚关系。

标签: javascript ember.js


【解决方案1】:

您可以在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/2122 https://github.com/emberjs/data/issues/3273#issuecomment-110965145

【讨论】:

  • 不,我不知道回滚问题,所以我应该在 deactivate 挂钩中使用 rollbackAttributes?
  • 回滚本身没有问题,只是沟通不畅。回滚被重命名为 rollbackAttributes,因为它只回滚属性。
  • Keo,不同意你的观点。
猜你喜欢
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2015-10-22
  • 2017-12-01
相关资源
最近更新 更多