Backbone模型默认情况下共享状态

时间:2012-06-18 17:39:22

标签: javascript backbone.js

我有两个模型实例,发现它们似乎在它们之间共享状态。我原以为会发生相反的情况。例如:

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。我在这里错过了一招吗?看起来getset是访问模型数据的正确安全方式,但它会导致这种行为(或者这是预期的)?

1 个答案:

答案 0 :(得分:4)

是的,fooObj将被共享,因为您只是在模型定义时创建一个。

而是使用函数创建默认值(请参阅docs):

defaults: function() {
  return {
    fooObj: {
      bar: {}
    }
  };
}