Я создал супер простое приложение Backbone с просто маршрутизатором и двумя представлениями, чтобы попытаться прибить правильный способ обработки маршрутизации без каких-либо хэш-панелей.Магистральный маршрутизатор без hashbangs
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 ...
Итак, мой вопрос заключается в следующем: как настроить базовую станцию для обработки URL-адресов, не полагаясь на hashbangs? Все, что я нашел на эту тему, говорит «О, просто pushState
!». Ну, я использую pushState
и, как я уже описал выше, вы не можете набрать URL-адрес, например /episodes
, без получения 404.
Это проблема на стороне сервера. Вероятно, Apache ищет index.html в эпизодах папки в вашем веб-каталоге. Возможно, вы можете попробовать переписать URL-адрес Apache на свой root index.html независимо от того, к какому URL-адресу вы переходите. Вероятно, это не очень хорошее долгосрочное решение, поскольку вы, вероятно, захотите добавить какую-то логику на стороне сервера (Node.JS, Python, Ruby, PHP и т. Д.). Тогда вам придется решить, хотите ли вы отображать правильную страницу на стороне сервера среди других проблем. – Gohn67