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

配列内の各オブジェクトの 1 つのプロパティに基づいて何かを計算するため。

配列内の各オブジェクトのすべてのプロパティに基づいて計算されたプロパティを作成することは可能ですか? モデルには、、 、... などpersonの多くのブール値プロパティがあり、それらのいずれかが変更されたときにこのプロパティを再計算できるようにしたいとします。しかし、私は怠け者で、次のようにすべてのプロパティを入力したくありません。isHungryisTiredisCranky

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

次のことを試しましたか?

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 に答える
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 に答える