1

Ember ObjectController を使用していくつかの計算されたプロパティを作成しようとしていますが、いくつかの問題が発生しています。私のオブジェクト (Baz) には、オブジェクト (Foo) の配列が含まれています。各 Foo にはいくつかのキーと値のペアがあり、それらをアルファとベータと呼びましょう。

次のようなコードを使用します。

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

すべての Foo オブジェクトの「アルファ」プロパティの合計を計算できますが、理想的には組み込み ID によって選択された特定の Foo 間の値を計算したいと考えています。配列から個々の Foo オブジェクトを選択しようとするために、かなりさまざまな式を試しましたが、それを理解できないようです。

これは ObjectController 内で実現できますか?それとも、このような値を試して計算する場所が間違っていますか?

コードから概念的なウォークスルーまで、どんな助けでも大歓迎です。

乾杯、アレン

4

1 に答える 1

2

の構築中itemに、メソッド内の のプロパティにアクセスできます。たとえば、製品の合計を見つけるには、それらがおよびである場合にのみ使用できます。reducetotalinStockonSale

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('model.@each')

同様に、複数の段階でフィルタリングを行う場合、つまり、フィルタリングしてから削減する場合、互いに依存する 2 つの異なる計算されたプロパティを持つことができます。たとえば、 と の製品のみを表示するinStock場合onSale

saleProducts: function() {
  return this.get('model').filter(function(product) {
    return product.get('inStock') && product.get('onSale');
  });
}.property('model.@each'),

次に、次totalsaleProductsような 2 番目の計算されたプロパティを設定できます。

total: function() {
  return this.get('saleProducts').reduce(function(total, product) {
    return total + product.get('price');
  }, 0);
}.property('saleProducts.@each'),

jsbinの例を次に示します。

于 2013-07-02T08:06:47.117 に答える