Запазване на модел в локално хранилище

Използвам адаптера localStorage на Jerome с 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 localStorage

person vihacker    schedule 18.03.2012