为什么灰烬路由器只允许导航到叶路线?(Why does Ember Router only allo

2019-07-30 07:01发布

东西我已经与Ember路由器最近发现是只允许导航到叶航线 - 航线无子路由。

现在,除非我错误地做事情,然后这似乎是在设计一个bug /错误。

让我们举个例子是这样的:

我有项目的集合,每个项目都有很多的合作者,有了这个我想建立一个三栏布局(如您的标准的桌面电子邮件客户端的东西)的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)
        )
      )
    )
  )
)

正如你会看到余烬不会调用updateRoute(设置URL),直至过渡到root.projects.show因为该行的https://github.com/emberjs/ember.js/blob/master/packages/ember-路由/ lib目录/ routable.js#L81

有没有其他人做过这样的事? 有没有更好的方法来设计呢?

Answer 1:

我发现要做到这一点,最好的办法是有一个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)
  )
)

NB话虽这么说,我做了3栏布局类似的事情,和我如上匹配的中间和右边栏的路线,并在共享布局添加左栏每个可能的中间视图。



Answer 2:

我想,这个问题解决了。 我使用的余烬路线没有索引,并不会面临任何叶子状态的问题。 我在浏览为什么我们需要在所有的指标,我降落在这里。 是否有任何其他原因使用索引状态呢?



文章来源: Why does Ember Router only allow navigating to leaf routes?