2014-10-10 4 views
0

Я пытаюсь реализовать многосегментную строку в таблице. Родительский контроллер - это просто контроллер объекта. Он имеет модель, и представление выполняет итерацию по набору записей модели как отдельные строки. Я применил itemController для всех строк в модели. Это работает. Но для функции «selectAll» в родительском контроллере я не могу получить все элементы (индивидуально). У вас есть идея, как это сделать? Вот моя работа до сих пор:Функция SelectAll с Ember ObjectController и ItemController

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('[email protected]') 

И мой Пункт Controller (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') 
}); 

Мои сомнения в том, как я делаю SelectAll на родительском контроллере (т.е. типа ObjectController), который выбирает все флажки всех детей. Я не уверен, что информации, которую я предоставил выше, достаточно. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Заранее спасибо

ответ

0

Я получил его, добавив слушателя к ребенку (ItemController), который прослушивает любые изменения в переменной родителя.

Вот что я сделал:

parentControllerDidChange: function() { 
    if (this.get('parentController.selectedAllItems')) { 
     this.set('isSelected', true); 
    } else { 
     this.set('isSelected', false); 
    } 
}.observes('parentController.selectedAllItems') 

Это сделал трюк. Теперь, если я переключаю логическую переменную на родительский контроллер, все дети реагируют. Убей красоту!

Смежные вопросы