Подтвердить что ты не робот

Как применять магистральный маршрутизатор для полного пути, а не хеша

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

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

4b9b3361

Ответ 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 });

Это должно сделать трюк.