【问题标题】:How do you create a computed property in Ember.js to see if a single Ember Data attribute is dirty?如何在 Ember.js 中创建计算属性以查看单个 Ember Data 属性是否脏?
【发布时间】:2016-07-11 05:02:35
【问题描述】:

我尝试在 Ember Data 1.13.16 模型上创建一个计算属性,如下所示:

export default DS.Model.extend({
  name: DS.attr('string'),
  isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function() {
    return !!this.changedAttributes()['name'];
  })
});

但由于某种原因,在调用 model.save() 之后,该属性永远不会重新计算为 false,即使 name 不再存在于 changedAttributes() 中。我怎样才能使这个计算属性工作?

这是一个简化的测试用例:https://ember-twiddle.com/87b1af7abfb103554cb2?openFiles=models.author.js%2C

【问题讨论】:

    标签: javascript ember.js ember-data computed-properties


    【解决方案1】:

    我相信这是因为 hasDirtyAttributes 没有在任何地方被使用,这意味着更改观察者不会正确设置。

    一个简单的解决方法是:

    isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function() {
      if (!this.get('hasDirtyAttributes')) { return false; }
      return !!this.changedAttributes()['name'];
    })
    

    这可确保 hasDirtyAttributes 属性被使用,并且该属性将在其他属性更改时更新。一般来说,如果你有一个属性作为依赖键,你肯定应该在计算函数体中getting它,如果你在函数体中getting一个属性,它应该总是被列为依赖键。我相信它以这种方式工作的原因是性能优化。

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 1970-01-01
      • 2013-06-29
      • 2016-06-27
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2016-05-17
      相关资源
      最近更新 更多