Я несколько не понимаю, чего легко добиться с помощью вычисляемых свойств Ember. Я использую https://github.com/funkensturm/ember-local-storage для управления локальным списком избранного.
Теперь у меня есть компонент, который должен отображать статус объекта вместе с печально известной кнопкой «звездочка» для переключения состояния избранного.
Код моего компонента выглядит следующим образом:
import Ember from 'ember';
import FavoritesLocal from 'my-app/models/favorites-local';
export default Ember.Component.extend({
storedFavorites: FavoritesLocal.create(),
isFavorite: Ember.computed('storedFavorites', function () {
return this.get('storedFavorites').contains(this.model.get('id'));
}),
actions: {
toggleFavorite() {
if(this.get('isFavorite')) {
this.get('storedFavorites').removeObject(this.model.get('id'));
} else {
this.get('storedFavorites').addObject(this.model.get('id'));
}
}
}
});
Шаблон содержит
{{#if isFavorite}}
<a {{action 'toggleFavorite'}} href="#"></a>
{{else}}
<a {{action 'toggleFavorite'}} href="#"></a><
{{/if}}
Модель для локального хранилища просто
import StorageArray from 'ember-local-storage/local/array'
export default StorageArray.extend({
storageKey: 'myFavorites'
});
Теперь, конечно, я хочу, чтобы компонент обновлялся при нажатии кнопки.
Мой конкретный вопрос касается того, ЧТО именно вычисляемое свойство должно наблюдать. Грубая попытка прослушивания изменений в свойстве storedFavorites (см. Выше) не удалась.
Ясно, что я мог бы отправить действие контроллеру и позволить ему обработать его и обновить шаблон, но это кажется немного перебором? Что мне не хватает?
Спасибо!