Javascript 返回每个模型的属性总和的计算属性

Javascript 返回每个模型的属性总和的计算属性,javascript,ember.js,ember-data,computed-properties,Javascript,Ember.js,Ember Data,Computed Properties,我有一个购物车模型,然后里面有一些类似这样的东西 [ { "item_id": 1, "item_name":"Item 1", "item_price": 500 }, { "item_id": 2, "item_name": "Item 2", "item_price": 230 }, { "item_id": 3, "ite

我有一个购物车模型,然后里面有一些类似这样的东西

[
    {
        "item_id": 1,
        "item_name":"Item 1",
        "item_price": 500
    },
    {
        "item_id": 2,
        "item_name": "Item 2",
        "item_price": 230
    },
    {
        "item_id": 3,
        "item_name": "Item 3",
        "item_price": 150
    }
]
我需要汇总
item\u price
属性,以便能够显示它,然后将其传递给ember data或ajax调用以完成购买

不确定我是否只是不理解计算的agregate数据,但我正在尝试这个

totalDue: Ember.computed.sum('model.@each.item_price')
在控制器上,但返回0


我在余烬
2.2.0

您可以这样做:

totalDue: Ember.computed('model.@each.item_price', function() {
  const model = this.get('model');
  if (!model) {
    return 0;
  }

  let sum = 0;
  model.forEach(item => sum += Ember.get(item, 'item_price'));
  return sum;
})
export default Ember.Controller.extend({
      model: [
        {
          "item_id": 1,
          "item_name":"Item 1",
          "item_price": 500
        },
        {
          "item_id": 2,
          "item_name": "Item 2",
          "item_price": 230
        },
        {
          "item_id": 3,
          "item_name": "Item 3",
          "item_price": 150
        }
      ],

      array: Ember.computed.mapBy('model', 'item_price'),
      sum: Ember.computed.sum('array'),
    });

您可以这样做:

totalDue: Ember.computed('model.@each.item_price', function() {
  const model = this.get('model');
  if (!model) {
    return 0;
  }

  let sum = 0;
  model.forEach(item => sum += Ember.get(item, 'item_price'));
  return sum;
})
export default Ember.Controller.extend({
      model: [
        {
          "item_id": 1,
          "item_name":"Item 1",
          "item_price": 500
        },
        {
          "item_id": 2,
          "item_name": "Item 2",
          "item_price": 230
        },
        {
          "item_id": 3,
          "item_name": "Item 3",
          "item_price": 150
        }
      ],

      array: Ember.computed.mapBy('model', 'item_price'),
      sum: Ember.computed.sum('array'),
    });

您也可以将其作为一个非常干净的内衬:

totalDue: Ember.computed('model.@each.item_price', function() {
  return this.get('model').mapBy('item_price').reduce((a, b) => a + b, 0);
})

您也可以将其作为一个非常干净的内衬:

totalDue: Ember.computed('model.@each.item_price', function() {
  return this.get('model').mapBy('item_price').reduce((a, b) => a + b, 0);
})

您也可以这样做:

totalDue: Ember.computed('model.@each.item_price', function() {
  const model = this.get('model');
  if (!model) {
    return 0;
  }

  let sum = 0;
  model.forEach(item => sum += Ember.get(item, 'item_price'));
  return sum;
})
export default Ember.Controller.extend({
      model: [
        {
          "item_id": 1,
          "item_name":"Item 1",
          "item_price": 500
        },
        {
          "item_id": 2,
          "item_name": "Item 2",
          "item_price": 230
        },
        {
          "item_id": 3,
          "item_name": "Item 3",
          "item_price": 150
        }
      ],

      array: Ember.computed.mapBy('model', 'item_price'),
      sum: Ember.computed.sum('array'),
    });

您也可以这样做:

totalDue: Ember.computed('model.@each.item_price', function() {
  const model = this.get('model');
  if (!model) {
    return 0;
  }

  let sum = 0;
  model.forEach(item => sum += Ember.get(item, 'item_price'));
  return sum;
})
export default Ember.Controller.extend({
      model: [
        {
          "item_id": 1,
          "item_name":"Item 1",
          "item_price": 500
        },
        {
          "item_id": 2,
          "item_name": "Item 2",
          "item_price": 230
        },
        {
          "item_id": 3,
          "item_name": "Item 3",
          "item_price": 150
        }
      ],

      array: Ember.computed.mapBy('model', 'item_price'),
      sum: Ember.computed.sum('array'),
    });

获取
model.forEach不是一个函数
,而且模型是在模型钩子中的路由上定义的,只是还没有使用ember数据或ajax调用。另外,我在ember
2.2.0
上,您能给我看一下控制器中的
console.log(this.get('model'))
值吗?那么
模型是否在控制器上定义?如果没有,则在使用前必须在
setupController
hook-in路由中设置
model
属性。很抱歉,您的代码工作正常,因为我发布了此消息,所以我将路由设置为返回多个模型,因此将行
this.get('model')
更改为
this.get('model.items'))
workedGetting
model.forEach不是一个函数
,模型也在模型钩子中的路由上定义,只是还没有使用ember数据或ajax调用。另外,我在ember
2.2.0
上,您能给我看一下控制器中的
console.log(this.get('model'))
值吗?那么
模型是否在控制器上定义?如果没有,则在使用前必须在
setupController
hook-in路由中设置
model
属性。很抱歉,您的代码工作正常,因为我发布了此消息,所以我将路由设置为返回多个模型,因此将行
this.get('model')
更改为
this.get('model.items'))
worked
Ember.computed.sum
做了一些不同的事情:它只是将数组值属性中的值相加。
Ember.computed.sum
做了一些不同的事情:它只是将数组值属性中的值相加。获取
this.get(…).mapBy不是控制台中的一个函数
错误。如果将此-
控制台.log(this.get('model'))
-放在
返回
语句上方,它会为您输出什么?抱歉,我忘了将模型切换为RSVP哈希,所以我需要使用
模式.items
来获取模型哈希的items部分。啊,好的。:-)获取
this.get(…).mapBy在控制台中不是一个函数
错误。如果将此-
console.log(this.get('model'))
-放在
return
语句上方,它会为您输出什么?抱歉,忘了我将模型切换到RSVP哈希,所以我需要使用
模式.items
来获取模型哈希的items部分。啊,这样就可以了。:-)