使用异步Ember模型混淆计算属性的行为

时间:2015-03-12 00:17:07

标签: ember.js ember-data ember-cli

我遇到了一些奇怪的行为,试图将计算属性构建到我的Ember Data模型中。这是我的.coffee文件的样子:

LineItemModel = DS.Model.extend
  quantity: attr 'number'
  length: attr 'number'
  product: DS.belongsTo 'product', async: true
  priceAdjust: attr 'number', defaultValue: 0

  weight: (->
    return this.get('product.weight') * length
  ).property('product')

  # Get MLF price
  price: (->
    # Adjust if percentage is specified
    adjust = (mlf, adjustment) ->
      return mlf unless adjustment
      mlf += Math.ceil(mlf * adjustment / 100)

    prices = this.get('product').get 'prices'
    level = this.get('quote').get 'level'
    price = prices.filterBy 'level', level
    return if price[0] then adjust( price[0], this.get('priceAdjust') ) else 0
  ).property('product', 'product.@each.prices', 'quote.level', 'priceAdjust')

我的问题是我的weight方法this.get('product.weight')总是返回undefined。我做了一些测试,除this.get('product.id')以外的任何东西都返回undefined。为了使事情更加混乱,这是有效的

Ember.computed.alias('product.weight')

这是来自price方法

  # Get MLF price
  price: (->
     console.log this.get('product.weight')
     ...

这是参考产品型号:

ProductModel = DS.Model.extend
  ...
  weight: attr 'number'
  prices: DS.hasMany 'price', async: true

我不确定我是否做错了或者这是一个错误。这是一个cli应用v0.1.15

1 个答案:

答案 0 :(得分:0)

据我所知,问题与承诺有关,无论它们是否得到解决。这是我到目前为止所提出的:

weight: Ember.computed.alias 'product.weight'

计算属性很容易处理承诺关系业务

# Lbs / Ft
lbs: (->
  return this.get('weight') * this.get('length')    
).property('weight', 'length')

现在我知道我有一些体重值,我可以用它来计算。我仍然不确定为什么我似乎不需要price方法,但这似乎是“Ember”做事的方式。如果可以改进,我会喜欢一些反馈。