2013-12-21 3 views
1

У меня есть два маршрутизатора, каждый из которых имеет один маршрут. Первый маршрутизатор позволяет называть его маршрутизатором страницы, обрабатывает маршрут: "", рисуя мебель страницы (верхний колонтитул, нижний колонтитул и т. Д.). Второй маршрутизатор, маршрутизатор модуля, имеет дело с хэш-маршрутом, ":program/config", показывая в середине страницы конфигурацию для выбранной программы.Магистральные маршрутизаторы и обновление страницы

Пользователь запускает приложение, перейдя на домашнюю страницу: http://host/service/home.html. Это приводит к тому, что маршрутизатор страницы рисует домашнюю страницу. Пользователь выбирает одну из конфигураций программы из меню, и URL изменяется на: http://host/service/home.html#ABC/config. Это заставляет маршрутизатор модуля отображать правильный модуль.

Проблема в том, что когда страница обновляется, вызывается только маршрутизатор модуля. Страница правильно отображает содержимое модуля, но меню ушло - маршрутизатор страницы не вызывается.

Что я делаю неправильно? Как это исправить?

ответ

0

У вашей страницы маршрутизатора есть маршрут со значением "" который не существует, если у вас есть URL-адрес с abc/config. Было бы лучше, если вы удалите маршрутизатор страницы и оставите только маршрутизатор модуля.

Попробуйте выполнить свое приложение, чтобы выполнить то, что делает маршрутизатор страницы onLoad, и оставить только один маршрутизатор.

Создание верхнего и нижнего колонтитула, которые все одинаковы на каждой странице, не является заданием для маршрутизатора.

+0

Спасибо за ответ. Не имеет значения, что abc/config является якорем, а не частью самого URL-адреса? В последнем пункте: верхний/нижний колонтитулы в моем приложении управляются через магистраль и представляют собой сложные объекты сами по себе, которые нуждаются в ресурсах, настроенных в маршрутизаторе, - было бы неправильно настроить все мое приложение в загрузке страницы, особенно, поскольку некоторые из настроек выполняются в под-маршрутизаторе. –

+0

Кажется, что это способ сделать такие вещи в Backbone: http://lostechies.com/derickbailey/2012/02/06/3-stages-of-a-backbone-applications-startup/ Из чего я могу понять - вам нужно инкапсулировать логику запуска (рендеринг заголовка/нижнего колонтитула с извлечением данных, который им нужен) в каком-то модуле, зависит от этого модуля в вашем main.js (если вы используете require.js или эквивалент как $ doc load event) и запустить там. Затем, если есть разные init для маршрутов diff, добавьте их в модуль ure и зависните от него и используйте определенные методы init для этого маршрута. – justin

Смежные вопросы