当我在Ember-Data中更改hasMany / belongsTo关系时,如何使父文件变脏?

时间:2013-11-15 10:09:15

标签: ember.js ember-data relationship

现在,我对Ember Data的主要问题是,当我更改关系(hasMany或belongsTo)时,父级不会变脏。

我需要这个因为:

  • 我依赖于isDirty属性来显示保存/取消按钮
  • hasMany和belongsTo ids与父母一起发送,因此父母实际上 IS 是脏的。

此外,当我回滚父级时,仅还原belongsTo关系。 hasMany模型保持不变。

我发现this issue谈到了一个dirtyRecordsForHasManyChange钩子,但在Ember Data v1中似乎并不存在(v1.0.0-beta.3,这就是我所说的)使用)。

我该如何做到这一点?

感谢。

2 个答案:

答案 0 :(得分:11)

对于belongsTo,我添加了一个观察者。

例如在我的I Person中有一个belongsTo省。在我的表格上,我有一个省份的余烬选择。在Person模型中,我添加了这个观察者......

provinceChanged: function() {
  this.send('becomeDirty');
}.observes('province')

我也依赖于isDirty显示/隐藏保存/取消按钮,虽然该观察者在将记录标记为脏时做得很好,但如果我点击取消,我会做回滚,但我还需要标记记录清洁。我在取消操作的人控制器中执行此操作。

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。

希望这有帮助。

答案 1 :(得分:5)

this.get('model').send('becomeDirty');

应该这样做。只需将becomeDirty发送给父模型即可。