Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 根据@each的所有属性计算的属性_Ember.js - Fatal编程技术网

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->无返回值)刚刚尝试过,似乎不起作用。这正是我所希望的。