我有一个模型的两个实例,发现它们似乎在它们之间共享状态。我本以为会发生相反的情况。例如:
var Q = Backbone.Model.extend({
defaults: {
fooObj: {
bar: {}
}
},
initialize: function() {
_.bindAll(this, 'addFoo');
},
addFoo: function(f) {
//get fooObj
fo = this.get('fooObj');
fo.bar[1] = f;
//set it back
this.set('fooObj', fo);
},
getFoo: function (argument) {
return this.get('fooObj');
}
})
q1 = new Q();
q2 = new Q();
q1.addFoo({iam: 'foo'});
console.log(q2.getFoo().bar[1]); // {iam : "foo"}
尽管我将
{iam: "foo"}
添加到实例q1
,但它似乎也传播到了q2
。我在这里错过了把戏吗?似乎get
和set
是访问模型数据的正确安全方法,但是却导致此行为(或者是预期的)? 最佳答案
是的,fooObj
将被共享,因为您在模型定义时仅创建一个。
而是使用函数创建默认值(请参见docs):
defaults: function() {
return {
fooObj: {
bar: {}
}
};
}