【问题标题】:Emberjs - how to access method of one controller from another controller'Emberjs - 如何从另一个控制器访问一个控制器的方法'
【发布时间】:2013-03-07 06:42:39
【问题描述】:

在 emberjs pre2 中,我们可以从另一个控制器访问控制器或控制器中的任何方法 以下方式:

App.get('router').get('navController').method1();

谁能建议 emberjs rc1 的类似代码是什么?

谢谢

【问题讨论】:

  • 我一直在尝试遵循数据向下操作的范例。你将如何做类似的事情是使用 @Def_Os 建议的依赖注入,但在应用程序路由上做。

标签: controller ember.js


【解决方案1】:

由于controllerFor 已被弃用,我认为更正确的方法是需要

this.get('controllers.nav').method1()

它需要在你的控制器中声明你的需求

App.YourController = Ember.ObjectController.extend({
  needs: ['nav'],
  ....

【讨论】:

    【解决方案2】:

    您可以在ControllerRoute 中尝试

    this.controllerFor("nav").method1()
    

    注意

    当问题被问到时,这是正确的答案,但由于 controllerFor 已被弃用,请检查 joscas 的答案

    【讨论】:

    • 有没有办法从视图中调用控制器方法?
    • 试试 this.get("controller").method1() 从视图访问控制器方法
    • DEPRECATION: Controller#controllerFor is deprecated, please use Controller#needs instead
    【解决方案3】:

    在 Ember 2 中,这是通过注入您想要访问的控制器来实现的:

    export default Ember.Controller.extend({
      nav: Ember.inject.controller(),
    });
    

    或者,如果您想指定一个不同于控制器名称的名称:

    export default Ember.Controller.extend({
      navController: Ember.inject.controller('nav'),
    });
    

    然后您可以像这样访问注入控制器的方法:

    this.get('navController').method1()
    

    【讨论】:

    • 我一直在尝试遵循数据向下操作的范例。您将如何做类似的事情是使用建议的依赖注入@Def_Os,但在应用程序路由上执行。然后不要直接调用方法,只需发送操作并让它冒泡到应用程序路由。这避免了在大型项目中难以管理的 2 个控制器之间复杂的直接依赖关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2017-03-23
    • 2015-08-02
    • 2015-10-31
    • 1970-01-01
    • 2015-10-05
    • 2018-06-15
    相关资源
    最近更新 更多