3

我尝试在 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

4

1 回答 1

8

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

一个简单的解决方法是:

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

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

于 2016-03-23T18:39:38.477 回答