Ember.js 如何从视图的init()方法获取任何控制器实例?
我正在从旧版本的EmberJS迁移我的项目。在某些地方,我通过在任何视图的init()方法中使用以下命令来获取与视图无关的控制器实例: 但现在这抛出了以下错误Ember.js 如何从视图的init()方法获取任何控制器实例?,ember.js,Ember.js,我正在从旧版本的EmberJS迁移我的项目。在某些地方,我通过在任何视图的init()方法中使用以下命令来获取与视图无关的控制器实例: 但现在这抛出了以下错误 Uncaught TypeError: Cannot call method 'get' of undefined 这可能是因为它无法获取路由器对象。现在如何获取与视图无关的控制器实例?或者如何获取路由器对象该“需要”功能允许控制器访问其他控制器,这允许控制器的视图访问其他控制器。(在余烬中对需求的一个很好的解释:) 如中所述,调
Uncaught TypeError: Cannot call method 'get' of undefined
这可能是因为它无法获取路由器对象。现在如何获取与视图无关的控制器实例?或者如何获取路由器对象该“需要”功能允许控制器访问其他控制器,这允许控制器的视图访问其他控制器。(在余烬中对需求的一个很好的解释:) 如中所述,调用
init()
时尚未设置视图的controller
属性,因此您需要在视图生命周期的稍后时间访问controller
。例如,这可能是willInsertElement()
或didinertelement()
挂钩
下面是一个示例,演示如何使用需要从视图访问另一个控制器:
谢谢…这很有效…但我想知道移除获取路由器对象并允许它的座右铭是什么…在我看来,如果我在
needs
中拥有所有控制器,那么它的工作方式将是相同的..我可能错了..以前它只是引用..现在是一个额外的数组..@CodeJack这里有一个很好的解释:谢谢..现在我觉得我也必须重构代码..而不仅仅是升级:)
Uncaught TypeError: Cannot call method 'get' of undefined
App = Ember.Application.create({});
App.ApplicationController = Ember.Controller.extend({
doSomething: function(message) {
console.log(message);
}
});
App.IndexView = Ember.View.extend({
templateName: 'index',
init: function() {
this._super();
// doesn't work, controller is not set for this view yet see:
// https://stackoverflow.com/questions/15272318/cannot-access-controller-in-init-function-of-view-in-1-0-0rc
//this.get('controller.controllers.application').doSomething("from view init");
},
willInsertElement: function() {
this.get('controller.controllers.application').doSomething("from view willInsertElement");
},
clickMe: function() {
this.get('controller.controllers.application').doSomething("from clickMe");
}
});
App.IndexController = Ember.Controller.extend({
needs: ['application']
});