Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何从视图的init()方法获取任何控制器实例?_Ember.js - Fatal编程技术网

Ember.js 如何从视图的init()方法获取任何控制器实例?

Ember.js 如何从视图的init()方法获取任何控制器实例?,ember.js,Ember.js,我正在从旧版本的EmberJS迁移我的项目。在某些地方,我通过在任何视图的init()方法中使用以下命令来获取与视图无关的控制器实例: 但现在这抛出了以下错误 Uncaught TypeError: Cannot call method 'get' of undefined 这可能是因为它无法获取路由器对象。现在如何获取与视图无关的控制器实例?或者如何获取路由器对象该“需要”功能允许控制器访问其他控制器,这允许控制器的视图访问其他控制器。(在余烬中对需求的一个很好的解释:) 如中所述,调

我正在从旧版本的EmberJS迁移我的项目。在某些地方,我通过在任何视图的init()方法中使用以下命令来获取与视图无关的控制器实例:

但现在这抛出了以下错误

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