Адаптер локального хранилища 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.

Другие вопросы по тегам