绑定到深层嵌套属性时,Ember计算属性不会触发

时间:2014-06-01 22:53:40

标签: javascript ember.js coffeescript

这个JSBin隔离了我在代码中遇到的问题。我有一个嵌入式模型的层次结构和一个计算属性(data),只要链的最底部的值发生变化(symbol),它就会触发。该示例直接显示属性以及计算属性的结果。按钮会更改单击时的值。您将看到它更新了属性,但计算属性并未触发。当任何selectedAllocation.positions.@each.instrument.symbol更改时,为什么instrument.symbol无法触发计算?

如果这个例子似乎是人为的,那只是因为我试图抽象出现实中更为复杂的东西,例如:这些数组中只有一个对象,data是必需的,因为另一个库需要一个特定格式的简单JS对象。

1 个答案:

答案 0 :(得分:3)

  

请注意@each只能深入一级。您不能使用嵌套表单   比如todos。@ each.owner.name或todos。@ each.owner。@ each.name。

http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/

你需要创建一个别名才能使symbol达到一个级别(不是一个coffeescript的家伙,希望你可以通读黑客,下面的positions别名是为了踢和咯咯笑,没有区别。)

App.Position = Ember.Object.extend({
  instrumentSymbol: Em.computed.alias('instrument.symbol')
})

App.IndexController = Ember.ArrayController.extend
  selectedAllocation: null
  positions: Em.computed.alias('selectedAllocation.positions'),

  data: (->
    @get("positions").map (position) ->
      symbol: position.get "instrumentSymbol"
  ).property "positions.@each.instrumentSymbol"
  ...

http://jsbin.com/bivoyako/1/edit