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

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是访问模型数据的正确安全方法,但是却导致此行为(或者是预期的)?

最佳答案

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

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

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

10-07 21:17