0

モデルのインスタンスが2つあり、それらが状態を共有しているように見えます。逆のことが起こると思いました。例えば:

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モデルデータにアクセスするための正しい安全な方法ですが、それでもこの動作が発生します(またはこれは予想されます)?

4

1 に答える 1

4

はい、fooObjモデル定義時に作成するのは 1 つだけなので、共有されます。

代わりに、関数を使用してデフォルトを作成します (ドキュメントを参照):

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