2013-03-10 2 views
4

В настоящее время я работаю над очисткой небольшого веб-приложения, которое я написал в Mojolicious. В рамках этой очистки я отделяю свой javascript в общедоступном каталоге от своих файлов html.ep.Можно ли использовать помощники тегов Mojolicious во внешних JS-файлах?

Проблема, которая у меня есть, заключается в том, что я не могу больше ссылаться на тег-помощники, например «url_for» или даже ссылаться на значения в stash, такие как «<% $ stashvalue%>».

Любая идея о том, как или если я могу это сделать, очень ценится.

ура.

ответ

4

Что я обычно делаю, это инкапсуляция большей части моего javascript в вызовы функций или объекты в чистых файлах javascript. Затем в моих шаблонах я включаю эти чистые файлы javascript и использую api, который я создал в этих файлах из шаблона, интерполируя переменные на стороне сервера в аргументы функций. Вы можете просмотреть код для Galileo, чтобы увидеть несколько примеров.

Например, см., Как this template передает значения табуляции в функциональность .

5

Материал в каталоге public подается статический, оптимально вашим веб-сервер, а не Mojolicious или Plack, так что файл не обрабатывается с помощью Mojolicious, таким образом <% $stashvalue %> ничего не значит.

Решение состоит в том, чтобы внедрить те части javascript, которые нуждаются в доступе к переменным на стороне сервера в шаблонах mojo - довольно уродливые, но меньше кода для записи.

Еще один способ - сделать ajax-вызов из ваших файлов javascript, когда они будут загружены, и получить значения, отправленные сервером - более изящные, но еще более написанные коды.

Еще один, что я могу думать, было бы переместить эти JavaScript файлы в папке, которая получает обрабатывается Mojolicious и включить их параметризованных - в вашем html.ep файл, который требуется, что JS файл, сделайте следующее:

<script type="text/javascript" src="http://example.com/url/served/by/mojo/?param1=<% $stashvalue %>&param2=<% $stashvalue2 %>"></script> 

И в контроллере, который отвечает на /url/served/by/mojo/, визуализируйте этот js-файл с замененными параметрами теми из запроса. В качестве альтернативы вы можете сохранить/получить эти параметры также на session

Как обычно, в Perl существует несколько способов сделать это.