Я настроил очень простое приложение Backbone с маршрутизатором и двумя представлениями, чтобы попытаться найти правильный способ обработки маршрутизации без хэш-бангов.
var Router = Backbone.Router.extend({
routes: {
'': 'index',
'episodes': 'episodes'
},
index: function () {
var view = new IndexView();
view.render();
},
episodes: function () {
var view = new EpisodesView();
view.render();
}
});
var IndexView = Backbone.View.extend({
el: $('#primary'),
render: function () {
console.log('index view');
}
});
var EpisodesView = Backbone.View.extend({
el: $('#primary'),
render: function () {
console.log('episodes view');
}
});
var router = new Router;
Backbone.history.start({pushState: true});
Я понимаю, что объект history
позволяет перемещаться между страницами вперед и назад, и это здорово. Однако то, как это на самом деле реализовано, кажется мне немного запутанным.
Например, я создал простой сервер MAMP для обслуживания файла index.html
и файла JS. При переходе к http://backbone:8888/
консоль регистрирует index view
, как я и говорю. Тем не менее, переход к http://backbone:8888/episodes
(введя его в адресную строку) возвращает 404. НО, если я перехожу к http://backbone:8888/#episodes
, URL-адрес перенаправляется на http://backbone:8888/episodes
(без хэш-банга), и я получаю episodes view
в консоли, что, очевидно, означает, что он нажимает этот EpisodesView
вид.
Отсюда я могу переключаться между индексом и просмотром эпизодов. (обратные удары /, прямые удары / эпизоды). Все в порядке, пока я снова не нажал кнопку «Обновить» на /episodes
. 404...
Итак, мой вопрос заключается в следующем: как настроить Backbone для обработки URL-адресов, не полагаясь на хэш-банды? Все, что я нашел по теме, говорит "о просто pushState
!". Что ж, я использую pushState
, и, как я описал выше, вы не можете напрямую перейти по URL-адресу, такому как /episodes
, без получения ошибки 404.