Подтвердить что ты не робот

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

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

Ответ 1

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

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 wont work, и он вернет все модели в один

Ответ 2

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

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

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

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

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

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