现在,我对Ember Data的主要问题是,当我更改关系(hasMany或belongsTo)时,父级不会变脏。
我需要这个因为:
isDirty
属性来显示保存/取消按钮此外,当我回滚父级时,仅还原belongsTo关系。 hasMany模型保持不变。
我发现this issue谈到了一个dirtyRecordsForHasManyChange
钩子,但在Ember Data v1中似乎并不存在(v1.0.0-beta.3,这就是我所说的)使用)。
我该如何做到这一点?
感谢。
答案 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发送给父模型即可。