Ember.js 1.0.0:父控制器中基于子ItemController属性的计算属性未更新
我有一个AlertsController,它下面有多个AlertController子级。当用户单击警报时,我会在AlertView的AlertController中将isSelected标志设置为true。然后,我在AlertsController中有一个computed属性,该属性应返回所选警报的数量 AlertsController和AlertController如下所示: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({
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代码时,您不知道属性是否存在。