2014-06-13 54 views
1

我想從parentController訪問我的childrenControllers屬性,但我不知道如何訪問它們。 基本上,我需要觀察我所有的孩子中的一個屬性(兒童未定義的數字)與屬性isChecked計算元素的數量true觀察孩子控制器屬性

我試圖用屬性this.controllers但這保持爲空。

你有什麼想法該怎麼做? 我正在使用Ember AppKit。

父控制器:

在我的模板(table.hbs):

{{#each item in items}} 
    {{render 'table-item' item}} 
{{/each}} 

在我的控制器(table.js

export default Ember.ArrayController.extend({ 
    countCheckboxes: function() { 
     //Will count the number of attribute "isChecked" to true 
    }.observes('/* children controllers attribute "isChecked" */'); 
}); 

兒童控制器:

在我的模板(table-item.hbs

{{input type="checkbox" checked=isChecked}} 

在我的控制器(table-item.js

export default Ember.ObjectController.extend({ 
    isChecked: false 
}); 
+0

爲什麼訪問控制器?直接去物品。但爲此,不要覆蓋ObjectController上的isChecked,並將其放在內容上。根據'items。@ each.isChecked'構建一個計算機屬性,然後使用'this.get('items')。filterBy('isChecked')' – Lux

+0

該項目沒有屬性isChecked並且永遠不會擁有該屬性,我無法將其添加到我的模型中。這就是爲什麼我需要它到我的控制器 – alexmngn

+0

爲什麼不能添加到模型?你不必在模型上聲明屬性,只需將它綁定到模型上就行了! – Lux

回答

1

這可能幫助你

var YourParentController = Ember.ArrayController.extend({ 
    actions: { 
    countCheckboxes: function(isChecked){ 
    //do something 
    } 
    } 
}); 
export default YourParentController 

export default Ember.ObjectController.extend({ 
    needs: ['yourParentController'], 
    isChecked: false, 
    checkedChanged: function(){ 
    var parentController = this.get('controllers.yourParentController'); 
    parentController.send('countCheckboxes', this.get('isChecked')); 
    }.observes('isChecked') 

}); 
+0

這是一個有趣的想法。不幸的是,我還需要從parentController中更改所有屬性「isChecked」的值。 – alexmngn

0

除了Saygun的回答,您可以通過遍歷您的陣列控制器的情況下迭代子控制器。如果你希望它是可重用的,你可以在itemController上使用parentController,而不必使用需求。

App.IndexController = Em.ArrayController.extend({ 
    itemController:'foo', 
    actions: { 
    isCheckedChanged: function(item){ 
     console.log(item); 
    }, 
    selectAll: function(){ 
     this.forEach(function(item){ // this will be the item controller 
     item.set('isChecked', true); 
     }); 
    } 
    } 
}); 

App.FooController =Em.ObjectController.extend({ 
    isChecked: false, 
    checkedChanged: function(){ 
    this.parentController.send('isCheckedChanged', this); 
    }.observes('isChecked') 
}); 

http://emberjs.jsbin.com/xureholi/1/edit

+0

我會說實話,這個答案比我的更好。我不知道itemController屬性。很高興學習新的東西。謝謝 – saygun