Ember.js嵌套属性计算返回undefined

时间:2014-02-14 02:42:49

标签: ember.js ember-data

我遇到了两级计算属性的问题。我对ember有点新意,所以会很感激一些指示。

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

绑定到表单后 - 项目级别计算效果很好,表单会随着我更改数量而更新。然而,订单总数似乎根本没有计算。我是否遗漏了属性依赖项中的内容?

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("items.@each.total"),
    itemCount: function() {
      return this.get('items').reduce(function(value,lineItem) {
        value += lineItem.get('quantity');  
      });
    }.property("items.@each.quantity"),
});

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')
});

1 个答案:

答案 0 :(得分:1)

问题是您的reduce功能不是return任何东西。试试这个:

total: function() {
  return this.get('items').reduce( function(value, lineItem) {
    return value += lineItem.get('total');  
  }, 0 );
}.property("items.@each.total"),

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