【问题标题】:Ember.js get controller of parent route using Router architectureEmber.js 使用路由器架构获取父路由的控制器
【发布时间】:2012-07-25 09:51:31
【问题描述】:

如果我有一个使用Router architecture的应用程序,如何获取父路由的控制器?

假设路线像

Router: Ember.Router.extend 
    enableLogging: true
    root: Ember.Route.extend
        main: Ember.Route.extend
            route: '/'
            connectOutlets: (router, event) ->
                 router.get('applicationController').connectOutlet('main')
            editor: Ember.Route.extend
                route: '/editor'
                connectOutlets: (router, event) ->
                    router.get('mainController').connectOutlet('editor')

那么我的EditorController 将如何获取我的MainController

我尝试了@get('parentController')@get('parent')@get('controller'),但没有成功

【问题讨论】:

    标签: javascript coffeescript ember.js ember-old-router


    【解决方案1】:

    根据我的理解,一个应用程序应该只有一个路由器,所以我们为什么不这样做:

    @get('App.router.mainController')
    

    我不知道什么是正确的方法!我觉得“目标”正在存储向其发送动作或事件的对象。

    【讨论】:

    • 谢谢,我可以确认这也有效! @Mike Aski 首先得到它,所以他保留了答案,但我会投赞成票! :)
    【解决方案2】:

    您可以通过控制器的target 属性访问路由器。

    例如,在您的情况下,来自任何控制器:

    @get('target.mainController')
    

    或者,如果您不使用 Ember 的头部修订版:

    @getPath('target.mainController')
    

    【讨论】:

    • 谢谢!看起来它实际上是@getPath('taget.mainController'),因为@get('target.mainController') 返回未定义。我会看看我是否在做任何不正常的事情,你也可以尝试确认一下吗?在我接受之前,我想确保这是 100%。
    • 当然,很抱歉让您感到困惑。使用带有get 的路径表达式是最近出现在最新版本中的东西。除非您正在跟踪头部,否则您确实应该使用getPath。更新了答案。
    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多