我注意到如果我为不同的路由使用相同的控制器,它不会被重置,所以我可以保持路由之间的数据共享,这对我很有帮助。
但我想知道......控制器什么时候重装? (运行init并清理他的所有属性)?
我可以手动告诉控制器重新加载吗?
感谢帮助人员:)
答案 0 :(得分:5)
控制器通常是单例实例(不包括itemController
实例),它们处于页面的生命周期。
如果您需要重置某些属性,可以在有需要的路线setupController
期间执行此操作。
App.FooRoute = Ember.Route.extend({
model: function(){
//return something...
},
setupController: function(controller, model){
this._super(controller, model);
controller.setProperties({foo:'asdf', bar: 'ewaf'});
}
});
或者你可以在控制器上定义一些重置它的方法,并在setupController
期间调用它。当换出控制器后面的模型时,计算属性都被标记为脏并自动重新计算。
App.FooRoute = Ember.Route.extend({
model: function(){
//return something...
},
setupController: function(controller, model){
this._super(controller, model);
controller.reset();
}
});
App.FooController = Ember.ObjectController.extend({
foo: 'asdf',
bar: 'wert',
reset: function(){
this.setProperties({foo:'asdf', bar: 'ewaf'});
}// if you want it to happen on init tack on .on('init') right here
});
App.FooController = Ember.ObjectController.extend({
foo: 'asdf',
bar: 'wert',
reset: function(){
this.setProperties({foo:'asdf', bar: 'ewaf'});
}.on('init')
});