我正在使用backbone + backbone.localStorage来保存我的数据,并且我得到了错误的行为:
我有一个名为user
的属性的模型设置Settings = Backbone.Model.extend({
localStorage : new Backbone.LocalStorage('settingsStore')
});
var settings = new Settings();
settings.set({user: 'USERNAME'});
settings.save();
在此代码之后,如果我在weinre中输出settings.attributes数据,我会得到以下内容:
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个新对象......并且每次都会不断增长。
答案 0 :(得分:2)
fguillen链接给出的问题的答案给出了这个问题的正确答案。
如果要正确保存,只需要使用硬编码的“ID”创建模型对象。
这样做之后:
var settings = new Settings({ id: 1 });
save()和fecth()方法正常工作。显然你必须小心不要重复2个ID ...