计算的属性,返回每个模型上一个属性的总和
Computed property that returns a sum of a property on each 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
}
]
我需要总结item_price
属性,以便能够显示它,然后将它传递给ember数据或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;
})
工作演示。
您也可以作为一个非常干净的单行:
totalDue: Ember.computed('model.@each.item_price', function() {
return this.get('model').mapBy('item_price').reduce((a, b) => a + b, 0);
})
工作演示
您也可以这样做:
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'),
});
相关文章:
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 如何将值传递到上一个html页面
- Javascript获取上一个元素的内容
- 未激发路由的控制器属性上的观察者
- 禁用旋转木马中的下一个按钮和上一个按钮
- ..的Javascript..循环中的对象没有在最后一个属性上运行
- 如何检索上一个属性的名称属性
- 为什么我的 Javascript 中的两个正则表达式文本在一个属性上有所不同
- 查找具有特定数据属性 jquery 的最接近的上一个元素
- JavaScript引擎如何在具有原型的对象上设置属性,并为该属性设置一个setter
- 计算的属性,返回每个模型上一个属性的总和
- 如何使用jquery获取上一个标记(td)的子属性值
- js应该在一个属性上链接多个断言
- 你能用setter在一个属性上添加额外的属性吗
- 是否有一个(polyfill)代码重置所有继承的CSS属性上的给定元素
- 根据model属性将一个Backbone.js事件附加到视图上
- 如何对一个属性上的数组进行分组,以获得每个组在特定键处的聚合值
- 对象没有't支持属性或方法'上一个'在Internet Explorer中
- JavaScript:如何调用prototype属性上的一个函数,从prototype属性的另一个函数内部调用,所有这些
- Javascript把属性放到一个元素上