Ember什么时候控制器重新加载? (或重置)

时间:2014-06-08 15:34:59

标签: ember.js

我注意到如果我为不同的路由使用相同的控制器,它不会被重置,所以我可以保持路由之间的数据共享,这对我很有帮助。

但我想知道......控制器什么时候重装? (运行init并清理他的所有属性)?

我可以手动告诉控制器重新加载吗?

感谢帮助人员:)

1 个答案:

答案 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
});

在init

App.FooController = Ember.ObjectController.extend({
  foo: 'asdf',
  bar: 'wert',
  reset: function(){
    this.setProperties({foo:'asdf', bar: 'ewaf'});
  }.on('init') 
});