Ember.js 使用Ember ObjectController和ItemController选择所有功能

Ember.js 使用Ember ObjectController和ItemController选择所有功能,ember.js,multi-select,ember-controllers,Ember.js,Multi Select,Ember Controllers,我试图在表中实现一个多选行。父控制器只是一个对象控制器。它有一个模型,视图作为单独的行在模型的记录集上迭代。 我已经为模型中的所有行实现了itemController。这很有效。 但对于“selectAll”功能,在父控制器中,我无法(单独)获取所有项目。你知道怎么去吗? 以下是我迄今为止的工作: export default Ember.ObjectController.extend({ // parent Controller itemController: 'checkbox', sel

我试图在表中实现一个多选行。父控制器只是一个对象控制器。它有一个模型,视图作为单独的行在模型的记录集上迭代。 我已经为模型中的所有行实现了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类型)上选择all。我不确定我上面提供的信息是否足够。如果您需要更多信息,请告诉我。提前感谢

我通过向子项(ItemController)添加侦听器来侦听父项变量中的任何更改,从而使其正常工作

以下是我所做的:

parentControllerDidChange: function() {
    if (this.get('parentController.selectedAllItems')) {
        this.set('isSelected', true);
    } else {
        this.set('isSelected', false);
    }
}.observes('parentController.selectedAllItems')
这就成功了。现在,如果我在父控制器上切换布尔变量,所有子控制器都会做出反应。余烬的美丽