在init函数中设置的控制器总是相等的

时间:2012-07-18 13:16:09

标签: ember.js

我有一个Ember.Controller,在init函数中有setup-code。实际上,这段代码会产生AJAX请求。 但是当我创建这个控制器的两个实例时,它们总是等于。为什么,我又可以做些什么?

我已经制作了这个简单的例子,它将Test 1 Test 2写入控制台。把它写成Test 2两次。

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'));


​

1 个答案:

答案 0 :(得分: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/