2014-02-14 107 views
1

我有两个级别的计算属性的问题。我有点新的烬,所以会赞赏一些指针。Ember.js嵌套属性计算返回undefined

基本问题是有两个级别的计算属性 - 一个在订单级别,一个在物品级别。订单等级取决于物料的计算。

绑定到表单后 - 物品级计算效果很好,并且在更改数量时更新表单。然而,订单总额似乎并没有计算出来。我在属性依赖中错过了什么吗?

App.Order = DS.Model.extend({ 
    items: DS.hasMany('item', { async: true }), 
    payment_cash: DS.attr('number'), 
    payment_card: DS.attr('number'), 
    payment_credit: DS.attr('number'), 
    balance: DS.attr('number'), 
    total: function() { 
     return this.get('items').reduce(function(value,lineItem) { 
     value += lineItem.get('total'); 
     }); 
    }.property("[email protected]"), 
    itemCount: function() { 
     return this.get('items').reduce(function(value,lineItem) { 
     value += lineItem.get('quantity'); 
     }); 
    }.property("[email protected]"), 
}); 

App.Item = DS.Model.extend({ 
    order: DS.belongsTo('item'), 
    product: DS.belongsTo('product'), 
    quantity: DS.attr('number'), 
    adjustment: DS.attr('number'), 
    total: function() { 
    return this.get('product.price') * this.get('quantity') 
    }.property('product.price', 'quantity') 
}); 


App.Product = DS.Model.extend({ 
    name: DS.attr('string'), 
    description: DS.attr('string'), 
    price: DS.attr('number'), 
    imagePath: DS.attr('string') 
}); 
+0

看起来不错,你把一些日志扔进了总数?他们被称为? – Kingpin2k

回答

1

问题是你的reduce函数不是return什么。试试这个:

total: function() { 
    return this.get('items').reduce(function(value, lineItem) { 
    return value += lineItem.get('total'); 
    }, 0); 
}.property("[email protected]"), 

itemCount: function() { 
    return this.get('items').reduce(function(value, lineItem) { 
    return value += lineItem.get('quantity'); 
    } , 0); 
}.property("[email protected]"), 
+0

干得好。感谢那。我一直在圈子里呆了几天。 – user1220717