Сохранение модели в локальном хранилище - PullRequest
17 голосов
/ 25 сентября 2011

Я использую адаптер Джерома 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"
    }
  }

Ответы [ 2 ]

29 голосов
/ 21 октября 2011

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

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 или "" для идентификатора не будет работать, и он вернет все модели в одном

6 голосов
/ 18 марта 2012

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

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

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

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

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

Хранение объектов в HTML5 localStorage

...