修改2013-03-02
这似乎是在RC1中解决的
在以前版本的Ember.js中,控制器会保持状态分配给它们,但这似乎是Pre4中的一个问题。
所以,如果我有这个控制器
App.UsersController = Ember.ArrayController.extend({
content: ['mike', 'jen', 'sofia'],
_content_observer: (function(){
/* I'm called, but my author doesn't know why */
console.log('Content was altered! But why? And by whom?');
}).observes('content')
});
由于某些无法解释的原因,内容会被覆盖。我不想使用余烬数据,但似乎我被逼这个方向。
此JS Fiddle举例说明了这个问题。
发生了什么事?我如何阻止它,或者这是如此深深地刻在余烬的意见中,我需要接受它并顺其自然?
修改
更进一步,似乎设置为model
的任何设置都将设置为content
值,即使您覆盖setupController
挂钩。
e.g:
UsersRoute = Ember.Route.extend({
model: function() {
/*I should never be called, but I am. How curious.*/
return ['This','Shouldnt','Be','Assigned'];
},
setupController: function() {
/* According to http://emberjs.com/guides/routing/specifying-a-routes-model/, I should prevent the model from being assigned to content, but I don't */
}
});
UsersController.content
最终会得到值['This','Shouldnt','Be','Assigned']
查看此更新的fiddle
答案 0 :(得分:0)
这不是真正的余烬数据。新路由器自动设置控制器的内容属性。不是从控制器定义中设置内容,而是通过覆盖模型挂钩来自定义将用于路由的模型。例如:
App.UsersRoute = Ember.Route.extend({
model: function() {
return ['mike', 'jen', 'sofia', 'greta']
}
}
我在这里修改了你的jsfiddle:http://jsfiddle.net/WGYmg/
答案 1 :(得分:0)
您可以使用setupController
方法根据需要设置控制器的内容:
setupController: function(controller) {
controller.set('content', []);
}
请参阅this fiddle
您可以使用model
方法返回原始内容:
model: function () {
var c = this.controllerFor('users');
return c.get('content');
}
这有点hackish,但仍然......:)