2013-10-07 82 views
2

我有一個AlertsController其中有多個AlertController下面的孩子。當用戶點擊警報時,我將isSelected標記爲AlertManager中的true爲AlertView。然後我在AlertsController中有一個計算屬性,它應該返回所選警報的數量。Ember.js 1.0.0:基於子項目控制器屬性未更新的父控制器中的計算屬性

的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, 
}); 

我知道在AlertControllerisSelected屬性更新但值在AlertsController numSelected只計算一次,當頁面加載。

我重新創建我在下面的小提琴問題:

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

有誰知道我可能是錯在這裏幹什麼?謝謝您的幫助!

回答

1

你不應該在App.AlertController定義isSelected

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

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

的原因是,如果你明確App.AlertController定義isSelected,它不會在代理content可用對象(因此它不會被App.AlertsController訪問)。

+1

謝謝你的解決方案!我對提供的「內容」對象有點困惑。這是否意味着您想要從另一個控制器訪問屬性,而無法在「擁有」控制器中明確定義該屬性?看起來好像讓代碼更難閱讀,因爲在查看AlertController代碼時,您不會知道該屬性存在。 – Sarus

相關問題