我正在尝试在表中实现多选行。父控制器只是一个对象控制器。它有一个模型,视图作为单独的行迭代模型的记录集。 我已经为模型中的所有行实现了一个itemController。这样可行。 但是对于'selectAll'功能,在父控制器中,我无法获得所有项目(单独)。你知道如何去做吗? 到目前为止,这是我的工作:
export
default Ember.ObjectController.extend({
// parent Controller
itemController: 'checkbox',
selectAll: function(key, value) {
var items = this.get('model.items');
if (arguments.length == 2) {
this.setEach('isSelected', value); //setEach is throwing an error sine it comes from ArrayController where as I am using ObjectController as the parent controller type
return value;
} else {
return this.isEvery('isSelected', true); //isEvery is also throwing error for the same reason
}.property('model.items.@each.isSelected')
我的项目控制器(checkboxcontroller)如下:
export default Ember.ObjectController.extend({
isSelected: false,
selectedListOfItems: [],
isSelectedChange: function() {
var selectedListOfItems = this.get('selectedListOfItems');
var itemId = this.get('id'); // comes from the model.items.id
debugger;
if (this.get('isSelected')) {
// add itemId to the selected array
var index = selectedListOfItems.indexOf(itemId);
if (index > -1) {
selectedListOfItems.splice(index, 1, itemId);
} else {
selectedListOfItems.push(itemId);
}
} else {
// remove itemId from the selected array
var index = selectedListOfItems.indexOf(itemId);
if (index > -1) {
selectedListOfItems.splice(index, 1);
}
}
this.set('selectedListOfItems', selectedListOfItems);
}.observes('isSelected')
});
我的疑问是我如何在父控制器(具有ObjectController类型)上选择selectAll,它选择所有子节点的所有复选框。我不确定我上面提供的信息是否足够。如果您需要更多信息,请告诉我。提前致谢
答案 0 :(得分:0)
我通过向子(ItemController)添加一个监听器来监听父变量的任何变化。
这就是我的所作所为:
parentControllerDidChange: function() {
if (this.get('parentController.selectedAllItems')) {
this.set('isSelected', true);
} else {
this.set('isSelected', false);
}
}.observes('parentController.selectedAllItems')
这就是诀窍。现在如果我在父控制器上切换布尔变量,所有的孩子都会做出反应。 Ember美女!