3

我之前使用过的计算属性类型如下所示:

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 中可能吗?

4

2 回答 2

0

理想情况下,您应该在 person 上有一个属性来汇总不愉快的属性,例如:

isUnhappy: function () {
  if (this.get('isHungry') || this.get('isTired') || this.get('isCranky')) {
    return true;
  }
}.property('isTired', 'isHungry', 'isCranky')

然后isAnyoneUnhappy只是观察everyone.@each.isUnhappy

于 2013-03-28T22:04:20.460 回答
0

您是否尝试过以下操作?

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.*')

我查看了 Ember 源代码,似乎有一些处理星号的逻辑。不过我不确定。

于 2013-03-28T21:59:23.583 回答