如何在Ember.js中创建一个计算属性来查看单个EmberData属性是否脏
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()
之后,即使name
不再存在于changedAttributes()
中,该属性也不会重新计算为false。如何使此计算属性工作?
以下是一个简化的测试用例: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服务在注入组件并在计算属性中使用后是未定义的
- 如何计算一个对象中五个属性中有多少是非null的
- 使用javascript动态计算top属性
- 如何递归地计算它在对象中出现的目标键(属性)的数量
- Ember.js:未在组件'中渲染的模型的计算属性;关于变更的参考
- 升级到Ember 1.0计算属性在视图中不再有效
- ES6非结构化中的计算属性-非结构化整体对象
- 在Ember中,can服务具有计算属性
- Tracker重新计算函数出现异常:无法读取属性'0'的未定义
- 计算数组中多个对象的属性
- Ember.js数组控制器计算属性的复选框
- 在ember.js中访问模型之外的计算属性
- Vue.js在计算属性中设置值
- 如何根据其他属性计算对象文字中的对象属性
- 为特定属性计算JSON对象的长度
- 在JavaScript中作为对象属性计算函数
- Javascript:根据属性计算产品变体的数量
- 使用td属性计算乘积之和
- 对每个调用执行JavaScript属性计算