14

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

我需要这个,因为:

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

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

我发现了这个关于dirtyRecordsForHasManyChange钩子的问题,但在 Ember Data v1(v1.0.0-beta.3,这是我正在使用的)中似乎不存在。

我怎样才能做到这一点?

谢谢。

4

2 回答 2

11

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

例如,在我的我有一个属于该省的人。在我的表格上,我有一个针对各省的 ember 选择。在 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。

希望这会有所帮助。

于 2014-01-22T19:45:36.900 回答
4
this.get('model').send('becomeDirty');

那应该做这个把戏。只需将 becomeDirty 发送到父模型。

于 2013-12-11T08:23:37.210 回答