ember.js - 当我更改 Ember-Data 中的 hasMany/belongsTo 关系时,如何使父级变脏?

标签 ember.js ember-data relationship

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

我需要这个,因为:

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

  • 此外,当我回滚父级时,只有belongsTo 关系被恢复。 hasMany 模型保持不变。

    我找到了 this issue说的是 dirtyRecordsForHasManyChange钩,但这似乎不存在于 Ember Data v1(v1.0.0-beta.3,这是我正在使用的)。

    我怎样才能做到这一点?

    谢谢。

    最佳答案

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

    例如,在我的人中,我有一个属于省的人。在我的表格上,我有一个针对各省的 ember 选择。在 Person 模型中,我添加了这个观察者...

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

    我也依赖 isDirty 来显示/隐藏保存/取消按钮,虽然该观察者在将记录标记为脏记录方面做得很好,但如果我点击取消,我会进行回滚,但我也需要将记录标记为干净。我在取消操作的 Person Controller 中执行此操作。
    cancel: function() {
      this.get('model').rollback();
      this.set('isEditing', false);
      this.get('model').adapterWillCommit();
      this.get('model').adapterDidCommit();
    }
    

    这一切似乎运作良好。

    对于另一个项目中的 hasMany,我们在 Controller 上使用了计算属性。
    isThisOrChildrenDirty: function() {
      return this.get('isDirty') || this.get('authors').get('isDirty');
    }.property('isDirty','authors.@each.isDirty')
    

    然后我们检查 isThisOrChildrenDirty 而不是检查 isDirty。

    希望这有帮助。

    关于ember.js - 当我更改 Ember-Data 中的 hasMany/belongsTo 关系时,如何使父级变脏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19998523/

    相关文章:

    javascript - Ember.JS - 无法根据计算属性进行筛选或筛选

    ember.js - 在 ember 中过滤商店数据

    performance - Ember 数据 : pushing many records to store is slow

    mysql - 如何在像 MySQL 这样的 RDBMS 中存储双向关系?

    ruby-on-rails - paper_trail 并保持关系不变

    model - 相关记录参数

    properties - Ember 多个属性更改,但要触发单个事件

    javascript - 实现 ember js 后网站无法呈现

    ember.js - Ember Action 在组件内部完成后如何重定向

    javascript - ember 组件递增/递减值