Emberjs对象在计算排序后失去其属性

时间:2015-04-21 18:37:50

标签: ember.js

我有一个表组件,它接收一个我称之为内容的模型。

{{my-table content=model }}

此模型将分类为计算属性(CP)。

multiSort: Ember.computed.sort('content','sortProperitsWithOrders')

我遍历multiSort并将每一行传递给行组件

  {{#each row in multiSort}} 
    {{my-table-row row=row columns=columns}}
  {{/each}}

在每一行中我都有一个复选框组件。如果更改,则会将操作发送到其父组件(行组件)。从行中我将动作进一步发送到表组件(动作),在那里我切换行的活动属性。

问题:使用排序后,row会丢失其活动属性,并取消选中该复选框。选中一个复选框,然后点击列标题。

我认为Ember.compute.sort会根据sortProperitsWithOrders获取内容并重新排列。因此,如果我在其中一个内容项目上设置了active属性,那么我会将其放在multiSort CP中。从multiSort开始,它会传递给行组件,从行传递到复选框(数据向下)。

JsBin:http://jsbin.com/mojuquhawo/1/edit?html,js,output

1 个答案:

答案 0 :(得分:0)

每次排序时,您会发现每行都会创建一个MyTableRowComponent的新实例。发生这种情况时,active属性(源自MyTableRowComponent)将设置为其初始值false

参见示例JSBin,显示在每个排序上创建的新组件 - 查看控制台日志记录。

您需要在某个地方存储active属性所在的位置 - Customer模型似乎是最合适的位置。

此外,我注意到MyCheckboxComponent未从Ember.Checkbox延伸 - 而是使用Ember.Component - 这也可能会导致问题。