我有一个购物车模型,然后其中的项目看起来像这样
[
{
"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_price
属性才能显示它,然后将其传递给ember数据或ajax调用以完成购买。
不确定我是不是只是用计算机来理解agregate数据的东西,但我正在尝试用这个
totalDue: Ember.computed.sum('model.@each.item_price')
在控制器上,但它返回0
我正在使用余烬2.2.0
答案 0 :(得分:3)
你可以这样做:
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;
})
答案 1 :(得分:2)
你也可以做一个非常干净的单行:
totalDue: Ember.computed('model.@each.item_price', function() {
return this.get('model').mapBy('item_price').reduce((a, b) => a + b, 0);
})
答案 2 :(得分:1)
你也可以这样做:
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'),
});