2013-12-01 5 views
1

Мы используем магистральную маршрутизацию, mod_rewrite, requirejs. Приложение находится в папке, а не в веб-корне, поэтому для изображений, css и js файлов требуются относительные ссылки на папки (если бы мы могли использовать абсолютные папки, которые загружали файлы).Как динамически установить базовый тег?

При доступе к маршруту с завершающим косой чертой ни один из js и css-файлов не загружается правильно, если в заголовке нет соответствующего базового тега. Например:

<base href="//localhost/myapp/" /> 

Это решение работает. Проблема в том, что нам нужно изменить шаблон базового тега, чтобы мы могли иметь dev и производственные версии кода. Но для загрузки js-файла переменная wont работает без базового тега.

Чтобы убедиться, что я сделал стандартные исправления для позвоночника. Закрепить дополнительный слеш (/):

routes: { 
    'faq(/)':'jumpToText', 
    'register(/)':'jumpToForm', 
}, 

И установка корня в истории

Backbone.history.start({pushState: true, root: "//localhost/myapp/"); 

Проблема, как представляется, неразрешимый mod_rewrite вопрос. Поэтому последняя мысль состоит в том, чтобы динамически установить базовый тег.

ответ

1

В конечном счете мы использовали JavaScript для анализа значения вне location.href. Заверните этот код в теге сценария в голове:

document.write("<base href="+'//'+document.location.host +'/'+ location.href.split('/')[3]+'/'+" />"); 

И сделал то же самое в routes.js (разбор из Ури)

Backbone.history.start({pushState: true, root: "/"+location.href.split('/')[3]}); 
+0

Как мы окопались больше мы решили использовать для компиляции и push метод с использованием gruntjs. Grunt позволяет хранить vars в yaml, а затем подставлять их во время генерации кода. Это больше работает, но работает хорошо http://gruntjs.com/. – punkael

Смежные вопросы