Адаптер локального хранилища ember: как получить данные и работать с ними
Я использую Ember в сочетании с Electron.
Поскольку пользователь может определить некоторые настройки для приложения, я подумал, что это элегантная идея - хранить данные настроек в локальном хранилище.
Для этого я использую адаптер ember-local-storage.
Хранение, удаление и отображение этих данных работает как чудо, НО Эти настройки должны использоваться в некоторых функциях, поэтому я хочу вытащить их из локального хранилища. Я ожидал массив или объект JSON или даже тот же формат, который показан в локальном хранилище. Но я получаю только огромный абстрактный объект?!
Это то, что я хочу хранить (например):
{"identifier":"identifier1","bid":"6653ggd245","name":"test1"}
{"identifier":"identifier2","bid":"kkhd7765vv","name":"test2"}
Вот что отображается в localstorage (dev tools):
{"buttons":
{"records":
{"i7lvj":{"id":"i7lvj","identifier":"identifier1","bid":"6653ggd245","name":"test1"},"i80vm":{"id":"i80vm","identifier":"identifier2","bid":"kkhd7765vv","name":"test2"}
}}}
Вот как я пытался получить доступ к данным:
this.get('store').findAll('buttons').then(function(SavButtons){
console.log(SavButtons);
});// gett all stored buttons
this.get('store').findRecord('buttons','i7lvj').then(function(SavButtons){
console.log(SavButtons.data);
});// get specific button -> works
Эти данные являются основой для создания массива params для использования в Promises для запросов API. Что я могу сделать, чтобы получить это в многоразовой структуре? Например: 0:{record1} 1:{record2}
Или есть даже более простой / лучший способ сохранить настройки, сделанные пользователем после закрытия приложения, может быть, я что-то упустил.
Большое спасибо!
1 ответ
Во-первых, вы уверены, что ваша модель называется "пуговицами"? Вам, вероятно, нужно использовать
this.get('store').findAll('button')
Кроме того, то, что вы получаете из хранилища - это Ember.ArrayProxy или какой-то другой класс, расширенный из Ember.Array. У него есть специальные методы для работы с элементами, вы должны попробовать те
Во-вторых, я не думаю, что Ember Data хорош для настроек. Я считаю, что гораздо проще создать собственный сервис "настройки" и использовать его. Позвольте мне поделиться своей реализацией, которую я использую с node-webkit. Это не будет работать для вас "как есть", но вы можете получить представление. Я сделал это с поддержкой как файлов, так и локального хранилища (файлы для nw-app и хранилище для web-приложения), вы можете упростить _persist
а также _restore
методы, если вам нужно только локальное хранилище.
Краткое объяснение того, как это работает: это базовый сервис с измененными init
, set
а также setProperties
методы. Поэтому, когда вы звоните в свой контроллер this.get('settings').set('key', vale);
, настройки будут сохранены в локальном хранилище. И когда служба инициализируется, настройки будут загружены из хранилища в память. Одно ограничение: вы должны явно позвонить set
а также setProperties
способы настройки сервиса, если вы будете использовать что-то вроде this.set('settings.key', value);
настройки не будут сохранены. Основное преимущество отдельного сервиса перед данными ember заключается в том, что вам не нужно создавать модели для различных типов настроек, вы можете сохранить любое простое значение или POJO.