использовать результаты из ember data findQuery как ArrayController contentBinding

Я пытаюсь написать свое первое «настоящее» приложение для Ember. Я прошел пару руководств и теперь пытаюсь использовать ember в сочетании с Ember Data для извлечения данных из приложения Rails и их отображения.

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

App.itemsController = Em.ArrayController.create({
  content: App.store.findQuery(App.Item, {visible: true}),
});

У меня также есть App.ItemIndexView, шаблон которого выглядит так

{{#each App.itemsController}}
    {{id}}{{view App.ItemView item=this}}
{{/each}}

У меня есть пара вопросов по этому поводу.

Прежде всего, я хочу разрешить пользователю изменять видимость элементов на false. У меня есть этот код в файле App.ItemView:

acknowledge: function() {
  this.item.set('visible', false);
  App.store.commit();
}

запись обновляется, однако я хочу, чтобы весь этот элемент исчез из представления, а это не так. Как удалить эту запись из App.itemsController.content?

Мой второй вопрос, который на самом деле может также ответить на первый, я полностью в захолустье, что касается моей реализации этого? Я чувствую, что у меня должен быть способ установить что-то вроде contentBinding: 'App.store.findQuery(App.Item, {visible: true})' и удалить невидимые, но я пробовал это, и ничего не появляется. Поэтому мне интересно, есть ли что-то в том, как у меня настроено все мое приложение, и оно не позволяет играть хорошо.


person rm-rf    schedule 04.08.2012    source источник


Ответы (1)


Вы можете использовать функцию filter вместо findQuery:

content: App.store.filter(App.Item, function (item) {
  return item.get('visible');
})

Результат будет переоценен при изменении базовых данных. Однако вам все равно нужно получать данные с сервера через find/findAll/findQuery.

person Stéphane Blond    schedule 06.08.2012
comment
круто, это именно то, что мне было нужно. Спасибо! - person rm-rf; 06.08.2012