如何在 Ember.js 中创建计算 属性 以查看单个 Ember 数据属性是否脏?
How do you create a computed property in Ember.js to see if a single Ember Data attribute is dirty?
我试过在 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
我认为这是由于 hasDirtyAttributes
未在任何地方使用,这意味着更改观察器将无法正确设置。
一个简单的修复方法是:
isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function() {
if (!this.get('hasDirtyAttributes')) { return false; }
return !!this.changedAttributes()['name'];
})
这确保 hasDirtyAttributes
属性 被消耗并且当其他 属性 改变时这个 属性 将被更新。一般来说,如果你有一个 属性 作为依赖键,你绝对应该 get
在计算函数体中使用它,如果你 get
使用 属性在函数体中,它应该始终作为依赖键列出。我相信它以这种方式工作的原因是由于性能优化。
我试过在 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
我认为这是由于 hasDirtyAttributes
未在任何地方使用,这意味着更改观察器将无法正确设置。
一个简单的修复方法是:
isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function() {
if (!this.get('hasDirtyAttributes')) { return false; }
return !!this.changedAttributes()['name'];
})
这确保 hasDirtyAttributes
属性 被消耗并且当其他 属性 改变时这个 属性 将被更新。一般来说,如果你有一个 属性 作为依赖键,你绝对应该 get
在计算函数体中使用它,如果你 get
使用 属性在函数体中,它应该始终作为依赖键列出。我相信它以这种方式工作的原因是由于性能优化。