0

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

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"}到 instance q1,但它似乎也被传播到q2了。我在这里错过了一个技巧吗?它似乎是访问模型数据getset正确安全方式,但它会导致这种行为(或者这是预期的)?

4

1 回答 1

4

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

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

defaults: function() {
  return {
    fooObj: {
      bar: {}
    }
  };
}
于 2012-06-18T17:43:02.700 回答