2013-07-01 152 views
1

我想用Ember ObjectController创建一些计算属性,并遇到一些困难。我的对象(Baz)包含一个对象数组(Foo)。每个Foo都有一些键/值对,我们称它们为alpha和beta。Ember.JS计算属性

使用这样的代码:

App.BazController = Ember.ObjectController.extend({ 
    total: function() { 
     return this.get('foos').getEach('alpha').reduce(function(accum, item) { 
      return accum + item; 
     }, 0); 
    }.property('[email protected]') 
}); 

我可以计算出每一个Foo对象的“阿尔法”属性的总和,但我想计算具体FOOS之间的值,最好通过其内置的ID选择。我尝试了各种各样的表达式来尝试从数组中选择一个单独的Foo对象,但我似乎无法弄清楚。

这可以在一个ObjectController中完成,或者这是错误的地方去尝试和计算这些值吗?

从代码到概念演练的任何帮助将不胜感激。

干杯, 艾伦

回答

2

您可以在reduce方法访问item的性能,同时建立了total。例如,要找到产品的总数,但只有它们是inStockonSale,才能使用。

totalByReduce: function() { 
    return this.get('model').reduce(function(total, product) { 
    if (product.get('inStock') && product.get('onSale')) { 
     return total + product.get('price'); 
    } else { 
     return total; 
    } 
    }, 0); 
}.property('[email protected]') 

同样,如果你正在做的滤波在多个阶段,即: - 过滤然后还原,可以具有取决于相互2种不同的计算性能。举例来说,如果你只显示产品是inStockonSale

saleProducts: function() { 
    return this.get('model').filter(function(product) { 
    return product.get('inStock') && product.get('onSale'); 
    }); 
}.property('[email protected]'), 

然后拿到saleProducts你可以设置一个第二个计算的财产像total

total: function() { 
    return this.get('saleProducts').reduce(function(total, product) { 
    return total + product.get('price'); 
    }, 0); 
}.property('[email protected]'), 

这里有一个jsbin例子。

相关问题