Сохранение модели в локальном хранилище
Я использую адаптер 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"
}
}
Ответы
Ответ 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