0

2 つのルート ( comments, trackbacks) がネストされているため、からアプリに直接アクセスしてからpostにアクセスしようとしています。残念ながら、コントローラーが完全に初期化されておらず、コンテンツが読み込まれていないようです。contentcommentsControllertrackbacksController/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ますか? 私のアプローチに関して何か問題がありますか?

4

1 に答える 1

4

プロパティを使用して、コントローラーからすべてのコントローラーにアクセスできますcontrollers。たとえば、trackbacksController から、次を使用できます。this.get('controllers.commentsController')

編集:私はあなたの問題を理解していませんでした。2 つのコントローラーの間にはいくつかの依存関係があると思います。私の観点からは、アプリケーションの初期化順序に依存することはできません。そのため、init メソッドでは、他のコントローラーにアクセスできなくなります。

しかし、observer を trackbacksController に入れることができると思います。これは、controllers.commentsController.contentorを監視しcontroller.commentsController.@eachます。したがって、commentsController にデータが入力されると、通知されます。

于 2012-08-09T18:58:25.330 に答える