Ember.js 使用路由器架构获取父路由的控制器
Posted
技术标签:
【中文标题】Ember.js 使用路由器架构获取父路由的控制器【英文标题】:Ember.js get controller of parent route using Router architecture 【发布时间】: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')
,但没有成功
【问题讨论】:
【参考方案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
。更新了答案。以上是关于Ember.js 使用路由器架构获取父路由的控制器的主要内容,如果未能解决你的问题,请参考以下文章
Ember.js 路由器和 initialState 中的嵌套路由