Дублирование данных 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 идентификатора...