我有一个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'));
答案 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/