Ответ 1
Как обсуждалось в комментариях, проблема в том, что при использовании URL-адресов стиля push-state сервер не распознает URL-адреса маршрута магистрали.
Для иллюстрации, скажем, ваш корневой каталог приложения находится в server/app/index.html
, и вы пытаетесь использовать URL-адрес, который Магистраль маршрутирует в /report/print
. С URL маршрутизация фрагментов, это нормально:
http://server/app/index.html#report/print
Сервер игнорирует часть после #
и возвращает index.html; затем нагрузка Магистральные маршруты до report/print
.
Но если вы используете маршрутизацию push-state, то URL-адрес выглядит следующим образом:
http://server/app/index.html/report/print
И сервер выдает ошибку 404, потому что он не распознает что-либо на этом пути, поэтому Backbone никогда не загружается.
Решение состоит в следующем:
- Как отмечают Backbone.js docs, измените код сервера, чтобы сервер отображал правильный контент для каждого маршрута базовой линии или
- (что мне кажется проще) переведите URL-адрес на веб-сервер (IIS, Apache), чтобы он возвращал
index.html
для любого запроса, который является магистральным маршрутом, напримерindex.html/report/print
,index.html/report/add
и т.д.
В IIS, например, вы должны поместить следующее в web.config под свой корень приложения:
<rewriteMaps>
<rewriteMap name="StaticRewrites">
<add key="index.html/report/print" value="index.html" />
<add key="index.html/report/add" value="index.html" />
<!-- etc -->
</rewriteMap>
</rewriteMaps>