Использование маршрутизатора Backbone.js без хэша

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

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

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


person Kevin O'Hara    schedule 07.05.2013    source источник


Ответы (1)


Из документации Backbone (выделено мной):

Backbone.Router предоставляет методы для маршрутизации клиентских страниц и подключения их к действиям и событиям.

Другими словами, Backbone Router был разработан только для обработки URL-адресов на стороне клиента (часть после хеша), а не URL-адресов на стороне сервера (часть до хеша). Возможно, существует способ взломать маршрутизатор и Backbone.History использовать полные URL-адреса, а не только хэш, но это будет непросто, и я бы не рекомендовал этого делать.

Одной из альтернатив, которую вы могли бы рассмотреть, является своего рода логика onDocumentReady, которая проверяет URL-адрес страницы и, если ее хэш не соответствует URL-адресу, добавляет хэш. Это сделает так, что если кто-то посетит "/foo", ваш код преобразует его в "/foo#foo", и магистральный маршрутизатор можно будет использовать в обычном режиме.

Другим вариантом, однако, было бы просто написать своего рода «маршрутизатор», который на самом деле будет проще, чем Backbone, потому что ему нужно работать только один раз при загрузке страницы. Вот простой пример:

var mockRouter = {
    foo: function() {
        // do stuff for page "foo"
    },
    bar: ...
}
$(function() {
    mockRouter[window.location.pathname]();
});
person machineghost    schedule 28.09.2014