【问题标题】:Ember.js nested property calculations returning undefinedEmber.js 嵌套属性计算返回未定义
【发布时间】:2014-02-14 02:42:48
【问题描述】:

我遇到了两个级别的计算属性问题。我对 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')
});

【问题讨论】:

  • 看起来不错,你有没有把一些日志扔到总数中?他们被召唤了吗?

标签: ember.js ember-data


【解决方案1】:

问题是你的reduce 函数不是returning 任何东西。试试这个:

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"),

【讨论】:

  • 干得好。感谢那。这几天我一直在兜圈子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
相关资源
最近更新 更多