Сохранение модели в локальном хранилище

Я использую адаптер localStorage Джерома с Backbone, и он отлично работает для коллекций.

Но теперь у меня есть одна модель, которую мне нужно сохранить. Итак, в моей модели я установил:

localStorage: new Store("msg")

Затем я делаю свои сохранения и выборки. Моя проблема в том, что каждый раз, когда я делаю обновление и инициализирую свое приложение, в localStorage добавляется новое представление моей модели, см. ниже.

Что я делаю неправильно?

window.localStorage.msg = {
  // Created after first run
  "1de5770c-1431-3b15-539b-695cedf3a415":{
    "title":"First run",
    "id":"1de5770c-1431-3b15-539b-695cedf3a415"
  },
  // Created after second run
  "26c1fdb7-5803-a61f-ca12-2701dba9a09e":{
    "0":{
      "title":"First run",
      "id":"1de5770c-1431-3b15-539b-695cedf3a415"
    },
      "title":"Second run",
      "id":"26c1fdb7-5803-a61f-ca12-2701dba9a09e"
    }
  }

person Sebastian    schedule 25.09.2011    source источник


Ответы (2)


Я столкнулся с той же проблемой. Может у вас есть что-то похожее на это

var Settings = Backbone.Model.extend({
  localStorage: new Store("Settings"),
  defaults: { a: 1 }
});

var s = new Settings;
s.fetch();

я изменился на

var s = new Settings({ id: 1 });

Адаптер localStorage проверяет идентификатор, например

 case "read":    resp = model.id ? store.find(model) : store.findAll(); break;

поэтому 0 или "" для id не будет работать, и он вернет все модели в одном

person Igor Alekseev    schedule 21.10.2011
comment
Правильный! Спасибо @lublushokolad ;) - person guillaumepotier; 05.02.2012
comment
Ссылка на вопрос/проблему в github github.com/jeromegn/Backbone.localStorage/issues/56 - person Aivaras; 14.08.2013

Я тоже новичок в backbone.js, но похоже, что модель постоянства аналогична таблицам базы данных. То есть он предназначен для создания/удаления/чтения записей из таблицы. Адаптер localStorage делает то же самое, поэтому вы создаете «таблицу» Msg в localStorage и каждый раз создаете новую «запись» Msg, а адаптер дает каждому новому Msg уникальный идентификатор.

Если у вас есть только один объект, вероятно, проще напрямую использовать localStorage. API действительно прост:

localStorage.setItem("key","value");

Имейте в виду, что localStorage работает только с парами ключ/значение в виде строк, поэтому вам нужно будет преобразовать в/из строкового формата.

Взгляните на этот вопрос, чтобы узнать больше об этом:

Сохранение объектов в локальном хранилище HTML5

person vihacker    schedule 18.03.2012