基于 Mudasi Ali 的领导和审查 Ember v1.5 源,我使用以下内容:
Coffeescript(如果你想要 JS/ES,请使用 coffeescript.org 进行编译):
Ember.Route.reopen
parentRoute: Em.computed ->
r = @router.router
if r.currentTransition
handlerInfos = r.currentTransition.state.handlerInfos
else
handlerInfos = r.state.handlerInfos
handlerInfos = this.router.router.state.handlerInfos
return unless handlerInfos
parent = @
for info in handlerInfos
break if info.handler == @
parent = info.handler
parent
parentRouteName: Em.computed.alias('parentRoute.routeName')
parentController: ->
@controllerFor @get('parentRouteName')
parentModel: ->
@modelFor @get('parentRouteName')
上面提供了所有路由的属性parentRoute
and和两个方便的函数,它们分别返回父控制器和模型,这在许多情况下都很有用,尤其是当您将资源编辑为嵌套路由时。parentRouteName
parentController()
parentModel()
您还可以定义一些操作以在视图/控制器等中用于取消/返回处理,如下所示:
Ember.Route.reopen
actions:
goBack: ->
@transitionTo @get('parentRouteName')
如果你有一个很深的路由层次并且想要跳过一个中间路由,你只需要覆盖 goBack 如下:
App.SomeIntermediateRouteToSkipOnBack = Em.Route.extend
actions:
goBack: ->
# skip the immediate parent and use the grandparent route
@transitionTo @get('parentRoute.parentRouteName)