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

Ember.js 1.0.0:父控制器中基于子ItemController属性的计算属性未更新,ember.js,Ember.js,我有一个AlertsController,它下面有多个AlertController子级。当用户单击警报时,我会在AlertView的AlertController中将isSelected标志设置为true。然后,我在AlertsController中有一个computed属性,该属性应返回所选警报的数量 AlertsController和AlertController如下所示: App.AlertsController = Ember.ArrayController.extend({

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

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:


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

您不应在
App.AlertController
中定义
isSelected

App.AlertController = Ember.ObjectController.extend({
  // isSelected : false,
});
请参阅工作演示:


原因是,如果您在
App.AlertsController
中明确定义
isSelected
,它将在代理的
内容
对象中不可用(因此,
App.AlertsController
将无法访问它)。

感谢您的解决方案!我对提供的“内容”对象有点困惑。这是否意味着,当您想要从另一个控制器访问某个属性时,您不能在“拥有”控制器中显式定义该属性?这似乎使代码更难阅读,因为在查看AlertController代码时,您不知道属性是否存在。