mig*_*ain 14 relationship ember.js ember-data
现在,我对Ember Data的主要问题是,当我改变一个关系(hasMany或belongsTo)时,父亲不会变脏.
我需要这个因为:
isDirty属性来显示保存/取消按钮此外,当我回滚父级时,仅还原belongsTo关系.hasMany型号保持不变.
我发现这个问题涉及一个dirtyRecordsForHasManyChange钩子,但这似乎不存在于Ember Data v1(v1.0.0-beta.3,这就是我正在使用的)中.
我怎么能做到这一点?
谢谢.
小智 11
对于belongsTo,我添加了一个观察者.
例如,我在拥有belongsTo省的人.在我的表格上,我有一个省份的余烬选择.在Person模型中我添加了这个观察者......
provinceChanged: function() {
  this.send('becomeDirty');
}.observes('province')
我也依赖于isDirty显示/隐藏保存/取消按钮,虽然该观察者在将记录标记为脏时做得很好,但如果我点击取消,我会进行回滚,但我还需要将记录标记为干净.我在取消操作的Person控制器中执行此操作.
cancel: function() {
  this.get('model').rollback();
  this.set('isEditing', false);
  this.get('model').adapterWillCommit();
  this.get('model').adapterDidCommit();
}
这一切似乎都很有效.
对于另一个项目的hasMany,我们在控制器上使用了计算属性.
isThisOrChildrenDirty: function() {
  return this.get('isDirty') || this.get('authors').get('isDirty');
}.property('isDirty','authors.@each.isDirty')
然后检查isThisOrChildrenDirty而不是检查isDirty.
希望这很有帮助.
小智 4
this.get('model').send('becomeDirty');
这应该可以做到这一点。只需将becomeDirty发送到父模型即可。