Ember Router - 在同一级别加载来自不同控制器的内容

时间:2012-08-09 18:31:27

标签: ember.js ember-old-router

有两条路线(commentstrackbacks)嵌套在post内我尝试在contentcommentsController访问trackbacksController直接通过/posts/1/trackbacks申请。不幸的是,似乎控制器没有完全初始化,内容也没有被加载。

这就是Router的样子:

Router = Ember.Router.create
  root: Ember.Route.extend
    index: Ember.Route.extend
      route: '/'

    post: Ember.Route.extend
      route: '/posts/:post_id'

      index: Ember.Route.extend
        route: '/'
        redirectsTo: 'comments'

      comments: Ember.Route.extend
        route: '/comments'
        connectOutlets: (router) ->
          controller = router.get('postController')
          controller.connectOutlet 'comments', controller.get('comments')

      trackbacks: Ember.Route.extend
        route: '/trackbacks'
        connectOutlets: (router) ->
          controller = router.get('postController')
          controller.connectOutlet 'trackbacks', controller.get('trackbacks')

这是TrackbacksController

App.TrackbacksController = App.ArrayController.extend
  init: ->
    console.log App.router.get('attributesController.content') # : []
    @_super()

最佳做法是手动初始化router.commentsController以获取trackbacksController的内容吗?我的方法有什么不对吗?

1 个答案:

答案 0 :(得分:4)

您可以使用其controllers属性从控制器访问所有控制器。 例如,从trackbacksController,您可以使用this.get('controllers.commentsController')

编辑:我意识到我没有得到你的问题。我认为两个控制器之间存在一些依赖关系,从我的角度来看,你不能依赖于应用程序初始化顺序。因此在init方法中,您将无法访问其他控制器。

但我认为你可以在trackbacksController中放置一个观察者,它会观察controllers.commentsController.contentcontroller.commentsController.@each,所以当填充commentsController时,你会收到通知。