2014-02-07 5 views
8

В настоящее время я использую маршрутизатор Backbone для своего SPA. Это вроде работает нормально, но я имею ряд небольших вопросов:Альтернатива магистральному маршрутизатору без хэш-резервов и лучшая поддержка состояния назад/вперед?

Проблема в том, - я хочу, либо иметь pushState навигацию или ни один, а это означает - приложение состояние запускается на выполнение (когда я пройти «начальный» URL-адрес маршрутизатора или я запускаю маршрут через JS), но адресная строка не изменяется. Я не хочу, чтобы хеш-хенджеры возвращались для IE9. Он будет работать нормально, если IE9 не получит кнопку «Назад» и меняющуюся адресную строку, но сохраняет состояние навигации в приложении. Затем я могу показать пользователям URL-адрес, который они могут добавить в закладки, и сервер будет маршрутизировать эту страницу, а состояние приложения будет загружаться на основе исходного URL-адреса. Адресная строка, не изменяющаяся в IE во время навигации в приложении, является компромиссом, который я готов принять.

Еще одна проблема, с которой я столкнулся, заключается в том, что я использую navigate(url, {trigger: true}) для моих перехваченных HREF, а кнопка возврата не работает (ничего не делает). Но мне действительно нужно изменить состояние приложения на перемотку вперед/назад, даже если он будет восстановлен для этого конкретного URL-адреса - я бы предпочел перестроить состояние.

Каковы мои возможности в отношении маршрутизаторов, которые я мог бы использовать? Как я уже сказал, я не хочу иметь hashbang fallbacks (значение - я хочу только иметь один способ представления URL-адресов в приложении, период).

Что следует использовать? Director.js? History.js? Кажется, что существует довольно много библиотек роутера/истории, но кто из них наиболее близок к тому, что я ищу? ..

+0

Попробуйте http://millermedeiros.github.io/crossroads.js – mfirry

+0

Привет @Julik, когда вы говорите, что адресная строка не меняется, это означает, что если вы пишете начальный путь, например 'domain.com/page/one' будет отображать контент, и он останется на этом пути« навсегда »? Даже если вы перейдете на другую страницу? –

+0

Я имею в виду, что в IE я буду перехватывать клики по элементам 'a' и изменять состояние приложения в ответ на это, но он не будет записан в истории браузера - и URL-адрес останется там, где он находился при загрузке страницы , – Julik

ответ

2

Предположим, что у вас есть Modernizr вокруг сканирования поддержки истории HTML5, если я хорошо понимаю, «т быстрое решение быть, в главном файле макета JS, чтобы добавить событие

'click a' : "navigate" 

и добавить функцию навигации к этой схеме, как следовать

navigate : function(e){ 
    if(!Modernizr.history) document.location.href = $(e.currentTarget).attr("href"); 
}, 

для оптимизации, вы могли бы, конечно, связывать что только если история не поддерживается, не забудьте включить " modernizr "в вашем макете. Надеюсь, это интересный ответ для вас.

+0

Я мог бы сделать это, но это сделает полную перезагрузку страницы, в то время как я хотел бы просто изменить внутреннее состояние приложения. – Julik

+0

хорошо, а потому почему бы не работать с настраиваемыми событиями вместо маршрута? Я имею в виду, например, делать в выше созданной функции навигации по макету 'this.trigger («Готы», {whateverParamsYouNeedHere: истинный});' и в маршрутизаторе при инициализации вы 'вар, что = это ; this.listenTo (thelayoutyouobserve, «goto», function (e) { this.controller.theFunctionToNavigate (e.whateverParamsYouNeedHere);}); ' – bastien

+0

Поскольку большая часть моей структуры приложения основана на URL-адресах, хотя они могут и не быть видимый в адресной строке. Поэтому я не хочу прикреплять обработчики к определенным элементам пользовательского интерфейса, но для них запускается маршрутизатор благодаря наличию подходящего атрибута HREF. – Julik

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

  • Нет связанных вопросов^_^