Дублирование данных localStorage с использованием backbone.js + backbone.localStorage.js

Я использую backbone + backbone.localStorage для сохранения моих данных, и я получаю неправильное поведение:

У меня есть настройки модели с одним атрибутом под названием пользователь

Settings = Backbone.Model.extend({
    localStorage : new Backbone.LocalStorage('settingsStore')
});
var settings = new Settings();
settings.set({user: 'USERNAME'});
settings.save();

После этого кода, если я выведу данные settings.attributes в weinre, я получу следующее:

  settings.attributes  
   Object  
   id: "3ac78cfb-ad60-1ab8-8391-f058ae9bfcfb"  
   user: "USERNAME"  
   __proto__: Object

Затем я сохраняю модель в localStorage, очищаю и извлекаю ее снова:

settings.save();
settings.clear();
settings.fetch();

И проблема в том, что если я вывожу settings.attributes, теперь эти атрибуты хранятся внутри вложенного объекта:

   settings.attributes  
   Object  
   0: Object  
       id: "3ac78cfb-ad60-1ab8-8391-f058ae9bfcfb"  
       user: "USERNAME"  
       __proto__: Object  
   __proto__: Object

И проблема в том, что, когда я снова устанавливаю имя пользователя для изменения, добавляется новый атрибут, например:

   settings.attributes  
   Object  
   0: Object  
   id: "3ac78cfb-ad60-1ab8-8391-f058ae9bfcfb"  
   user: "USERNAME"  
   __proto__: Object  
   user: "NEWUSER"  
   __proto__: Object 

И если я сохраню эту модель и получу ее снова, я получу 2 новых объекта в атрибутах... и они будут расти каждый раз.

1 ответ

Решение

Ответ на вопрос, заданный ссылкой fguillen, дает правильный ответ на эту проблему.

Вам просто нужно создать объект модели с жестко закодированным "ID", если вы хотите сохранить его правильно.

После этого:

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

Методы save() и fecth() работают правильно. Очевидно, вы должны позаботиться о том, чтобы не повторять 2 идентификатора...

Другие вопросы по тегам