我想从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 :(得分: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')
});
答案 1 :(得分: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')
});