如何在 Ember.js 中创建计算属性以查看单个 Ember Data 属性是不是脏?
Posted
技术标签:
【中文标题】如何在 Ember.js 中创建计算属性以查看单个 Ember Data 属性是不是脏?【英文标题】: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
【问题讨论】:
【参考方案1】:我相信这是因为 hasDirtyAttributes
没有在任何地方被使用,这意味着更改观察者不会正确设置。
一个简单的解决方法是:
isNameDirty: Ember.computed('name', 'hasDirtyAttributes', function()
if (!this.get('hasDirtyAttributes')) return false;
return !!this.changedAttributes()['name'];
)
这可确保 hasDirtyAttributes
属性被使用,并且该属性将在其他属性更改时更新。一般来说,如果你有一个属性作为依赖键,你肯定应该在计算函数体中get
ting它,如果你在函数体中get
ting一个属性,它应该总是被列为依赖键。我相信它以这种方式工作的原因是性能优化。
【讨论】:
以上是关于如何在 Ember.js 中创建计算属性以查看单个 Ember Data 属性是不是脏?的主要内容,如果未能解决你的问题,请参考以下文章