6

最近EmberRouterで気付いたのは、リーフルート(子ルートのないルート)へのナビゲートのみが許可されていることです。

今、私が間違ったことをしていない限り、これは設計上のバグ/間違いのようです。

たとえば、次のようなものを考えてみましょう。

私にはプロジェクトのコレクションがあり、各プロジェクトには多くの共同作業者がいます。これにより、3列のレイアウト(標準のデスクトップメールクライアントのようなもの)でUIを構築したいと思います。左側には、プロジェクトのリストがあります。プロジェクトの中央の列には共同編集者のリストが表示され、共同編集者をクリックするとその詳細が右側の列に読み込まれます。

/projects/1ここで、プロジェクトをクリックしたときに移動/projects/1/collaborators/23し、共同作業者をクリックしたときに移動したいルーティングを使用します。

ネストされたルートの最初の部分を示すルーターは次のとおりです。

App.reopen(
  Router: Ember.Router.extend(
    enableLogging: true
    location: 'hash'

    root: Ember.Route.extend(
      index: Ember.Route.extend(
        route: '/'

        redirectsTo: 'projects'
      )

      projects: Ember.Route.extend(
        # This route is not routable because it is not a leaf route.
        route: '/projects'

        connectOutlets: (router) ->
          # List projects in left column
          router.get('applicationController').connectOutlet('projects', App.projects)

        show: Ember.Route.extend(
          # This route is routable because it is a leaf route.
          route: '/:project_id'

          connectOutlets: (router, project) ->
            # Render the project into the second column, which actually renders
            # a list of collaborators.
            router.get('projectsController').connectOutlet('project', project)
        )
      )
    )
  )
)

root.projects.showご覧のとおり、この行のために、Emberはに移行するまでupdateRouteを呼び出しません(URLを設定します)https://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/routable .js#L81

他の誰かがこのようなことをしましたか?これを設計するためのより良い方法はありますか?

4

2 に答える 2

7

これを行うために私が見つけた最良の方法はroot.projects.index、ルートが「/」で他に何もない状態にすることです。このようにして、すべてのページに固有の状態があります。

projects: Ember.Route.extend(
  # This route is not routable because it is not a leaf route.
  route: '/projects'

  connectOutlets: (router) ->
    # List projects in left column
    router.get('applicationController').connectOutlet('projects', App.projects)

  index: Ember.Route.extend(
    route: "/"
  )

  show: Ember.Route.extend(
    # This route is routable because it is a leaf route.
    route: '/:project_id'

    connectOutlets: (router, project) ->
      # Render the project into the second column, which actually renders
      # a list of collaborators.
      router.get('projectsController').connectOutlet('project', project)
  )
)

注: 3 列のレイアウトで同様のことを行っており、上記のように中央と右の列をルートに一致させ、共有レイアウトの左の列を可能な中央ビューのそれぞれに追加しています。

于 2012-07-08T06:57:29.217 に答える
2

この問題は解決したと思います。インデックスなしで ember ルートを使用しており、リーフ状態の問題に直面していません。なぜインデックスが必要なのかを調べていたところ、ここにたどり着きました。インデックスの状態も使用する他の理由はありますか?

于 2012-10-03T09:04:12.507 に答える