我尝试使用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>
答案 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
});
}
});