【问题标题】:Ember.js 1.0.0: Computed Property in Parent Controller Based on Child ItemController Property Not UpdatingEmber.js 1.0.0:父控制器中基于子 ItemController 属性的计算属性未更新
【发布时间】:2013-10-13 12:47:26
【问题描述】:

我有一个 AlertsController,它下面有多个 AlertController 子级。当用户单击警报时,我在 AlertViewAlertController 中将 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 属性正在更新,但 AlertsControllernumSelected 的值是仅在页面加载时计算一次。

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

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

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    你不应该在App.AlertController中定义isSelected

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

    查看工作演示:http://jsfiddle.net/BQmww/1/

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

    【讨论】:

    • 感谢您的解决方案!我对提供的“内容”对象有点困惑。这是否意味着无论何时您想从另一个控制器访问一个属性,您都不能在“拥有”控制器中明确定义该属性?看起来它使代码更难阅读,因为在查看 AlertController 代码时您不会知道该属性存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多