Как применять магистральный маршрутизатор для полного пути, а не хеша
Есть ли такая возможность? Наш сайт не является одной страницей, но все js файлы, сжатые внутри application.js
, могу ли я использовать базовый маршрутизатор для синтаксического анализа location.path
?
Я пытаюсь Backbone.history.start(pushState: true)
. Это работает для меня, но это правильно? Мне нужен только начальный синтаксический анализ, а не сложные маршруты и перенаправления через Backbone.Router
.
Ответы
Ответ 1
Вы можете просто использовать стандартный маршрутизатор. Когда вы создаете экземпляр и запускаете объект истории, вы можете указать, какой корневой каталог он должен использовать в качестве базы. В этом случае кажется, что вы хотите использовать '/'
var MyRouter = Backbone.Router.extend({
routes: {
"application/": "somefunc"
}
}
var app = new MyRouter();
Backbone.history.start({pushState: true, root: '/'});
Вам нужно будет настроить веб-сервер для работы с вашим HTML файлом, когда на вашем сервере вызывается какой-либо каталог (поэтому базовые, а не рельсы будут обрабатывать ваши маршруты).
Наконец, в файле HTML у меня есть функция, которая работает на Dom ready и вытаскивает путь из URL-адреса и передает его в navigate
.
var path = location.pathname;
app.navigate(path, {trigger: true});
Ответ 2
Я использую это:
window.location.href.replace(Backbone.history.getFragment(), '');
чтобы получить абсолютный URL-адрес основного корневого приложения.
Ответ 3
Вам нужно будет написать свой собственный маршрутизатор, но, к счастью, это довольно легко. Здесь я только что написал для сайта, над которым я работаю:
var routes = {
"terms": "terms",
"privacy": "privacy",
"password-reset": "reset"
};
var path = window.location.pathname.replace("/", "");
var page = routes[path];
if (!page) {
page = "404";
}
Мне не нужны никакие правила соответствия, которые предоставляет Backbone, но было бы не слишком сложно расширить эту идею с помощью регулярных выражений. Или, возможно, кто-то может написать небольшой модуль, который использует логику соответствия Backbone, но не выполняет перенаправление хешей/pushState.
Ответ 4
У меня была одна и та же проблема IE, есть простое решение. Загрузите modernizr и включите его.
Тогда do:
Backbone.history.start({ pushState: Modernizr.history });
Это должно сделать трюк.