Ember.js 根据@each的所有属性计算的属性
我以前使用过的计算属性类型如下所示:Ember.js 根据@each的所有属性计算的属性,ember.js,Ember.js,我以前使用过的计算属性类型如下所示: isAnyoneHungry: function () { var everyone = this.get('everyone'), anyoneHungry = false; everyone.forEach(function(person) { if (person.get('isHungry')) { anyoneHungry = true; } }); return anyoneHungry;
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
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')
用于根据数组中每个对象的一个属性计算某些内容
是否可以基于数组中每个对象的每个属性生成计算属性?
假设person
模型有许多布尔属性,如isHungry
,isTired
,isCranky
。。。我希望当这些属性中的任何一个发生变化时,能够重新计算这个属性。但我很懒,不想像这样键入每个属性:
function(){…}.property('everyone.@each.isHungry','everyone.@each.isTired','everyone.@each.isCranky.
相反,我想要这样的东西:
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
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中可能吗?您尝试过以下方法吗
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.*')
我查看了灰烬的来源,似乎有一些关于星号符号的逻辑。不过我不确定。理想情况下,您应该在person上拥有一个属性,用于汇总不愉快的属性,例如:
isUnhappy: function () {
if (this.get('isHungry') || this.get('isTired') || this.get('isCranky')) {
return true;
}
}.property('isTired', 'isHungry', 'isCranky')
然后,
isanyoneunchappy
只是观察每个人。@each.isunchappy
我不能让这个简单的小提琴工作,因为它与这个问题直接相关,所以我不能在这里添加它。尽管使用了@each.attributeName符号,我无法让JSFIDLE玩得很好th有时会使用框架,但问题是,与观察者不同,计算属性不会在其列出的子属性发生更改时自动调用。您必须调用someObject.get('changeWatcher')
或将其转换为观察者
而不是属性
。我同意这是一个理想的解决方案。我正试图找到一种方法,避免必须提供所依赖属性的所有名称。可能有很多属性您想在那里列出,或者如果您是,您可能不知道它们都是什么动态生成属性。更好:返回this.get('isHungry')| | this.get('isTired')| | this.get('isCranky')
(false->无返回值)刚刚尝试过,似乎不起作用。这正是我所希望的。