Альтернатива ассоциациям с EmberJS/Data
-
25-10-2019 - |
Вопрос
Я работаю над приложением EmberJS уже около недели и написал свой собственный адаптер localStorage для EmberJS/Data, обеспечивающий сохранение данных.Приложение представляет собой небольшое приложение для заметок.В идеале я хотел бы иметь модель Notebook, с которой связано множество моделей Note.
Однако я не нашел способа сделать это, что привело бы к созданию изменяемого массива.Хотя вы можете «реализовать» отношение hasMany...
Noted.Note = DS.Model.extend({
title: DS.attr('string'),
note_text: DS.attr('string'),
});
Noted.Notebook = DS.Model.extend({
title: DS.attr("string"),
notes: DS.hasMany(Noted.Note)
});
...ModelArray, созданный методом hasMany, является неизменяемым в EmberJS.Похоже, что над этим сейчас работают - существует ветка "ассоциаций" EmberJS/Data. здесь - но изменение ModelArray имеет решающее значение для этого приложения, т.е.создайте новую заметку:
var notebook = Noted.store.createResource(Noted.Notebook, {
title: "Foo Notebook"
});
notebook.get("notes").pushObject(Noted.store.createResource(Noted.Note, {
title: "Bar Note",
note_text: "Blah blah blah."
}));
notebook.get("notes").objectAt(0).get("title") //returns undefined
Хотя самый последний коммит EmberJS/Data включает в себя возможность изменения массива, в нем по-прежнему отсутствует какое-либо наблюдение — адаптер не уведомляется о внесении изменений и не сохраняется.
Мне любопытно:какая лучшая альтернатива ассоциации hasMany, пока эта возможность не будет добавлена в EmberJS/Data?Я изучал различные шаблоны, такие как наличие массива идентификаторов заметок в модели Notebook с каким-то интерфейсом выборки/извлечения, но ничего не добился.Я потратил довольно большую часть сегодняшнего дня, пытаясь найти лучший способ сделать это, и все, что у меня осталось, — это большое разочарование.
Решение
Ember-данные в конечном итоге попадут туда.До тех пор я просто изменяю массив и вручную вызываю все соответствующие методы хранилища, чтобы отразить мутацию.