【发布时间】:2013-03-19 12:47:50
【问题描述】:
我之前使用过的计算属性的类型是这样的:
isAnyoneHungry: function () {
var everyone = this.get('everyone'),
anyoneHungry = false;
everyone.forEach(function(person) {
if (person.get('isHungry')) {
anyoneHungry = true;
}
});
return anyoneHungry;
}.property('everyone.@each.isHungry'),
everyone: Ember.A() // an array that will hold person models
用于基于数组中每个对象的一个属性进行计算。
是否可以根据数组中每个对象的 每个 属性创建计算属性?
假设person 模型具有许多布尔属性,例如isHungry、isTired、isCranky,...并且我希望能够在其中任何一个更改时重新计算此属性。但我很懒,不想像这样输入每个属性:
function(){...}.property('everyone.@each.isHungry', 'everyone.@each.isTired', 'everyone.@each.isCranky'.
相反,我想要这样的东西:
isAnyoneUnhappy: function () {
var everyone = this.get('everyone'),
isAnyoneUnhappy = false;
everyone.forEach(function (person) {
if (person.get('isHungry') || person.get('isTired') || person.get('isCranky')) {
isAnyoneUnhappy = true;
}
});
return isAnyoneUnhappy;
}.property('everyone.@each.iWantEveryPropertyHere')
这在 Ember 中是否可行?
【问题讨论】:
-
我无法让这个简单的小提琴工作,为了方便起见,在这里添加它,因为它与这个问题直接相关。尽管使用了@each.attributeName 表示法,但我无法触发计算属性:jsfiddle.net/a2cxg/1
-
有时我很难让 jsfiddle 与框架很好地配合,但问题是,与观察者不同,计算属性不会在其列出的子属性发生变化时自动被调用。您必须调用
someObject.get('changeWatcher')或将其转换为observer而不是property。
标签: ember.js