Ember.js 1.0.0:基于子ItemController属性未更新的父控制器中的计算属性

时间:2013-10-07 03:04:32

标签: ember.js

我有一个 AlertsController ,其下面有多个 AlertController 子项。当用户点击警报时,我在 AlertView AlertController 中将 isSelected 标志设置为true。然后我在 AlertsController 中有一个计算属性,它应该返回所选警报的数量。

AlertsController和AlertController如下所示:

App.AlertsController = Ember.ArrayController.extend({
    itemController: 'Alert',
    //numSelected doesn't update when isSelected flag in an alert changes
    numSelected: function(){
        return this.filterProperty('isSelected', true).get('length');
    }.property('@each.isSelected')       
});

App.AlertController = Ember.ObjectController.extend({
    isSelected : false,
}); 

我知道 AlertController 中的 isSelected 属性正在更新,但 AlertsController numSelected 的值是只在页面加载时计算一次。

我在下面的小提琴中重新创建了我的问题:

JSFiddle:http://jsfiddle.net/WLAnF/8/

有谁知道我在这里做错了什么?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您不应在isSelected中定义App.AlertController

App.AlertController = Ember.ObjectController.extend({
  // isSelected : false,
});

参见工作演示:http://jsfiddle.net/BQmww/1/

原因是,如果您在isSelected中明确定义App.AlertController,它将无法在代理的content对象中使用(因此{{1}无法访问它}})。