7

私はEmber.Controller、init関数にsetup-codeを使用しています。実際には、このコードはAJAXリクエストを作成します。しかし、このコントローラーの2つのインスタンスを作成すると、それらは常に等しくなります。なぜ、そして私はこれを再び何ができるのでしょうか?

私はこの簡単な例を作成しました。これTest 1 Test 2はコンソールに書き込む必要があります。その書き込みをTest 22回噛みます。

App = Em.Application.create({});

App.TestController = Em.Controller.extend({
    content: Em.Object.create({
        info: null,
    }),
    init: function() {
        if(this.id == 1)
        {
            this.content.set('info', "Test 1");
        }

        if(this.id == 2)
        {
            this.content.set('info', "Test 2");
        }
    },
});

var c1 = App.TestController.create({id: 1});
var c2 = App.TestController.create({id: 2});

console.log('C1: ' + c1.get('content').get('info'));
console.log('C2: ' + c2.get('content').get('info'));


​
4

1 に答える 1

18

contentに値を設定する必要がinitあります。そうしないと、クラス宣言時に設定された値がすべてのインスタンスで共有されます。

App.TestController = Em.Controller.extend({
  content: null,

  init: function () {
    this._super();
    this.set('content', Em.Object.create({
      info: null
    }));

    // other setup here...
  }
});

http://codebrief.com/2012/03/eight-ember-dot-js-gotchas-with-workarounds/を参照してください

于 2012-07-18T13:21:07.280 に答える