Вопрос по ember-old-router, ember.js – Почему Ember Router разрешает только навигацию по конечным маршрутам?

6

Что-то, что я недавно заметил в Ember Router, это то, что он позволяет только перемещаться по конечным маршрутам & # x2014; маршруты без дочерних маршрутов.

Теперь, если я не делаю что-то неправильно, это похоже на ошибку / ошибку в дизайне.

Давайте возьмем, например, что-то вроде этого:

У меня есть коллекция проектов, у каждого проекта есть много соавторов, с этим я хочу создать пользовательский интерфейс с 3 колонками (что-то вроде стандартного почтового клиента на рабочем столе), где слева у меня есть список проектов, когда я нажимаю на В среднем столбце проекта отображается список соавторов, и при нажатии на соавтора его данные загружаются в правый столбец.

Теперь с маршрутизацией я хочу перейти к/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)
        )
      )
    )
  )
)

Как вы увидите, Ember не вызывает updateRoute (задает URL) до перехода кroot.projects.show из-за этой линииhttps://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/routable.js#L81

Кто-нибудь еще делал что-нибудь подобное? Есть ли лучший способ создать это?

Ваш Ответ

2   ответа
2

что эта проблема решена. Я использую маршруты ember без индекса и не сталкиваюсь с какими-либо проблемами состояния листа. Я просматривал, зачем нам вообще нужен индекс, и попал сюда. Есть ли еще какая-то причина для использования состояния индекса?

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 столбцов и сопоставляю средний и правый столбец с маршрутами, как указано выше, и добавляю левый столбец в общем макете к каждому из возможных средних видов.

Спасибо, Брэдли, похоже, это помогает. Ivan
Очень умно. Спасибо за чаевые.
@BradleyPriest У меня естьquestion об этом. Мне трудно понять, как использовать Ember.Router со сценариями CRUD. Не могли бы вы взглянуть?

Похожие вопросы