Как применить магистральный маршрутизатор для полного пути, а не хеш - PullRequest
11 голосов
/ 21 марта 2012

Существует ли такая возможность?Наш сайт - это не одна страница, а все js-файлы, сжатые внутри application.js. Могу ли я использовать магистральный маршрутизатор для анализа location.path?

Я пытаюсь Backbone.history.start(pushState: true).У меня это работает, но правильно ли это?Мне нужен только начальный разбор, не сложные маршруты и перенаправления через Backbone.Router.

Ответы [ 4 ]

13 голосов
/ 21 марта 2012

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

var MyRouter = Backbone.Router.extend({
    routes: {
        "application/": "somefunc"
    }
}

var app = new MyRouter();
Backbone.history.start({pushState: true, root: '/'});

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

Наконец, в файле HTML у меня есть функция, которая запускается на Dom ready, вытаскивает путь из URL и передает его navigate.

var path = location.pathname;
app.navigate(path, {trigger: true});
1 голос
/ 09 апреля 2014

Я использую это:

window.location.href.replace(Backbone.history.getFragment(), '');

чтобы получить абсолютный URL-адрес корневого каталога приложения.

0 голосов
/ 07 марта 2013

У меня была та же проблема IE, есть простое решение.Скачайте modernizr и включите его.

Затем выполните:

Backbone.history.start({ pushState: Modernizr.history });

Это должно сработать.

0 голосов
/ 14 июля 2012

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

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, но не выполняет перенаправление hash / pushState.

...