2015-03-24 5 views
0

У меня есть контроллер массива, который имеет свойство «isChecked» (свойство boolean). В моем контроллере я хочу получить коллекцию элементов, которые «проверены» (я имею в виду выбранные). Я не уверен, как получить доступ к свойству контроллера в модели.Свойство ArrayController для каждого элемента в модели в ember

Мой контроллер выглядит следующим образом:

App.ExampleController = Ember.ArrayController.extend({ 
    isChecked: false, 
    totalElements: function() 
    { 
     return this.model.get('length'); 
    }.property('@each'), 
    selectedElements: function() 
    { 
     var content = this.get('content'); 
     console.log(content.filterBy('isChecked')); 
     return content.filterBy('isChecked'); 
    }.property('isChecked'), 
}); 

Я связала «IsChecked» свойство флажком внутри каждого помощника следующим образом ..

<ul> 
    {{#each model}} 
     <li> 
      {{input type="checkbox" checked=isChecked}} 
      {{name}} 
     </li> 
    {{/each}} 
</ul> 

Я отобразить все элементы в модели с флажком, связанным с ним. Пользователь может выбрать несколько элементов из него. Поэтому я хочу эти предметы.

enter image description here

Теперь я хочу, чтобы получить список элементов, которые «проверены». Либо как вычисленное свойство, либо любое действие.

спасибо.

+0

Можете ли вы поделиться структурой модели ur? – Vaibhav

+0

У моей модели всего несколько объектов. Я просто извлекаю его из Интернета и напрямую возвращаю его с маршрута. Я имею в виду, что я не сохраняю его в магазине. – Presse

+0

Это как [{name: 'A', isChecked: true}, {name: 'B', isChecked: false}]? И вы просто хотите показать список флажков с свойством isChecked как true? – Vaibhav

ответ

3

Я думаю, вам нужно переместить свойство isChecked на ObjectController, а затем указать, что контроллер в контроллере массива имеет свойство itemController.

массив Контроллер:

App.IndexController = Ember.ArrayController.extend({ 
    itemController: 'color', 

    totalElements: function() { 
    return this.get('length'); 
    }.property('[]'), 

    selectedElements: Ember.computed.filterBy('@this', 'isChecked', true) 
}); 

(@this означает, что вычисленное свойство будет ссылаться на массив контроллеров элементов.)

Item Контроллер:

App.ColorController = Ember.ObjectController.extend({ 
    isChecked: false 
}); 

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

Надеюсь, это поможет.

+0

Спасибо, сработало :-) – Presse

+0

Добро пожаловать. Просто, чтобы вы знали, 'ObjectController' будет устаревшим в Ember v1.11: http://emberjs.com/guides/deprecations/#toc_objectcontroller –

+0

Тогда можно ли каким-либо другим способом исправить это?Или мне следует использовать метод, упомянутый в комментариях? – Presse

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

  • Нет связанных вопросов^_^