如何实现所有订单的小计?

时间:2014-12-29 14:41:25

标签: ember.js ember-data ember-cli

以下内容呈现:Subtotal: P[object Object]

似乎小计是返回promise对象而不是所有订单的总和。 VARIATION 2也会返回一个承诺。

我应该如何计算所有产品的小计?

  // app/controllers/application.js
  import Ember from 'ember';

  export default Ember.ObjectController.extend({    
    subtotal: function() {
      // VARIATION 1:
      var productCollectionPromises = this.get('orders').getEach('product');
      var sum = 0;

      return Ember.RSVP.all(productCollectionPromises).then(function(productCollections){
        productCollections.forEach(function(product){
          sum += product.get('amountInCents');
        });

        return sum;
      });

      // VARIATION 2:
      // return this.get('orders').mapBy('product').reduce(function(previousValue, product) {
      //   return previousValue + product.get('amountInCents');
      // }, 0) / 100;
    }.property('orders.@each.total'),
  });

  // app/templates/application.hbs
  <br /><strong>Subtotal:</strong> ${{subtotal}}

1 个答案:

答案 0 :(得分:3)

Ember.RSVP.all会返回一个承诺,这是您要返回的内容,您只需创建一个观察者并在更改时更新subtotal

// app/controllers/application.js
  import Ember from 'ember';

  export default Ember.ObjectController.extend({
    subtotal: null,
    totalsChanged: function() {
      var productCollectionPromises = this.get('orders').getEach('product');
      var sum = 0;

      Ember.RSVP.all(productCollectionPromises).then(productCollections => {
        productCollections.forEach(function(product){
          sum += product.get('amountInCents');
        });

        this.set('subtotal', sum);
      });
    }.observes('orders.@each.total'),
  });