Ember setupController和瞬态控制器

时间:2015-08-05 20:32:39

标签: ember.js

我尝试使用setupController方法从路径向控制器传递一些数据,只有在控制器是单例的情况下它才有效。

在两种情况下都会调用setupController方法,但如果变量是单例,则只在控制器上设置变量。

如何将数据从路由传递到瞬态控制器?

这里有一个小小的: http://ember-twiddle.com/ba55734e925664e363f4

取消注释/评论以下行以在singleton / transient之间切换: //application.register('controller:application', 'ApplicationController', { singleton: false });

我无法找到有关此功能是否有效的任何信息。我使用的是Ember 1.13.6。

控制器/ application.js中:

import Ember from 'ember';

export default Ember.Controller.extend({
  appName:'Ember Twiddle'
});

初始化/ application.js中:

export function initialize(container, application) {
 //application.register('controller:application', 'ApplicationController', { singleton: false });
}

export default {
  name: 'application-init',
  initialize: initialize
};

路由/ application.js中:

import Ember from 'ember';

export default Ember.Route.extend({
  setupController: function(controller,model) {
    this._super(controller,model);
    controller.var1 = "Variable 1";
  }
});

模板/ application.hbs:

<h1>Welcome to {{appName}}</h1>
<br>
<br>
{{var1}}
<br>


1 个答案:

答案 0 :(得分:1)

这似乎是一个实际的错误,因为控制器的实例与setupController中的实例和支持视图的实例不同。

解决方法是覆盖路由上的renderTemplate挂钩以传递控制器实例,而不是默认情况下查找的字符串引用(并创建控制器的新实例!)。

export default Ember.Route.extend({
  setupController(controller, model) {
    this._super(...arguments);
    controller.set('var1', 'foo');
  },
  renderTemplate(controller, model) {
    // note: don't call super here
    this.render('application', {
      controller: controller,
      model: model
    });
  }
});