2015-01-19 3 views
0

Я пытался решить эту проблему часами и не смог найти решение самостоятельно или в Интернете, поэтому, в конце концов, я сдался и решил отправить вопрос.RequireJS с PHP и хорошим URL

Я пытаюсь создать свое новое приложение PHP с javascript, управляемым как AMD, используя RequireJS. Я впервые использую этот подход, и я очень взволнован этим, но есть одна проблема, из-за которой работает javascript.

Это хороший URL-адрес, выполненный маршрутизацией. (Я использую Nette Framework для маршрутов и Apache в качестве веб-сервера). После того, как я настроил requrejs и мои зависимости, все работает отлично с домашней страницей (localhost /), но когда я перехожу на другую страницу, у которой есть URL-адрес, похожий на localhost/news, он перестает работать, а requirejs жалуется на несуществующие скрипты, например "localhost/testapp/news/js/vendor/jquery/dist/jquery.js". Вместо этого он должен выглядеть в "localhost/testapp/js/vendor/jquery/dist/jquery.js", но он принимает аргумент (в данном случае имя ведущего), перезаписываемый mod_rewrite как часть базового url. Я считаю, что ошибка где-то на моей стороне, так как это должно быть очень распространенной установкой, и я не смог найти подобный вопрос.

requirejs в layout.latte (шаблон базы):

<script src="{$basePath}/js/vendor/requirejs/require.js"></script> 
<script> 
    var absolute_base = {$basePath}; 
    require([absolute_base + '/js/app.js']); 
</script> 

(в переменном BasePath в рамках Nette всегда корень приложения, независимо от дополнительных параметров - в этом случае, /testapp)

app.js структуры

requirejs.config({ 
    baseUrl: 'js/modules', 
    paths: { 
     'jquery': '../vendor/jquery/dist/jquery', 
     'ink': '../vendor/InkJS/dist/js/ink-all', 
     'ajax': '../vendor/ajax' 
    } 
}); 

реж:

- www 
    - css 
    - sass 
    - graphics 
    - fonts 
    - js 
     - modules 
     - vendor 
      - jquery 
      - requirejs 
      - ink 
     - app.js 
    - index.php 

Это все, что у меня есть. Я пробовал множество комбинаций, относительных путей, точек перед дорожками, атрибута данных для тега скрипта и т. Д. И не смог найти решение.

Любая помощь с благодарностью приветствует!

ответ

0

Я, наконец, сделал это работу. Я выяснил, что это невозможно сделать таким образом, потому что requirejs будет всегда использовать текущий url как «root», а не URL самого скрипта (используется в теге «script»). По крайней мере, я не нашел способ, как обойти это.

Вместо этого я удалил весь файл app.js и переместил конфигурацию прямо в основной шаблон с доступной переменной php $ basePath, которую я использовал для определения basePath (в основном я определил абсолютный путь вместо относительного).

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

  • Нет связанных вопросов^_^