gpt4 book ai didi

ember.js - 如何从 View 的 init() 方法中获取任何 Controller 实例?

转载 作者:行者123 更新时间:2023-12-02 06:05:33 24 4
gpt4 key购买 nike

我正在从旧版本的 EmberJS 迁移我的项目。在某些地方,我曾经通过在任何 View 的 init() 方法中使用以下内容来获取与 View 无关的 Controller 实例:

var controller = App.get('router').get('firstController');

但是现在这会引发以下错误。
  Uncaught TypeError: Cannot call method 'get' of undefined 

这可能是因为它无法获取 Router 对象。现在如何获取与 View 无关的 Controller 实例?或如何获取路由器对象

最佳答案

“需要”功能允许 Controller 访问其他 Controller ,这允许 Controller 的 View 访问其他 Controller 。 (Ember 中对需求的一个很好的解释:http://darthdeus.github.com/blog/2013/01/27/controllers-needs-explained/)

Cannot access Controller in init function of View in 1.0.0rc 中所述, controller init() 时 View 的属性尚未设置被调用,所以你需要访问 controller在 View 生命周期的后期。这可能是 willInsertElement()didInsertElement()钩子(Hook),例如。

这是一个示例,演示使用需要从 View 访问另一个 Controller :

http://jsbin.com/ixupad/186/edit

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']
});

关于ember.js - 如何从 View 的 init() 方法中获取任何 Controller 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15337065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com