Underscore.js шаблоны в JSP
Шаблоны Underscore.js используют <% =%> для интерполяции переменных. К сожалению, это также интерпретируется в JSP (или GSP). Есть ли способ использовать шаблоны Underscore.js в JSP?
5 ответов
Согласно веб-странице, на которую вы ссылаетесь:
Если разделители в стиле ERB не являются вашей чашкой чая, вы можете изменить настройки шаблона Underscore>, чтобы использовать разные символы для выделения интерполированного кода.
Он предлагает вам изменить interpolate
а также evaluate
регулярные выражения. Это означает, что вы можете изменить использование <% =%> на то, что не конфликтует с JSP.
Добавьте следующую интерполяцию и оцените настройки на своей странице JSP
_.templateSettings = {
interpolate: /\<\@\=(.+?)\@\>/gim,
evaluate: /\<\@(.+?)\@\>/gim,
escape: /\<\@\-(.+?)\@\>/gim
};
тогда вы можете написать свои подходящие символы подчеркивания, если и для операторов с <@ @>
вместо <% %>
и не будет конфликтовать с JSP
Пример @coderman был полезен, но, к сожалению, он не работает, если вы хотите использовать новые строки в своих шаблонах. Например:
<@
var numPages = 10;
if ( numPages > 1 ) {
@>
<div><@=numPages@></div>
<@}@>
Проблема в том, что регулярное выражение для evaluate
не будет совпадать с новой строкой, как описано здесь: многострочный флаг регулярных выражений Javascript не работает
Итак, решение, которое сработало для меня:
_.templateSettings = {
interpolate: /\<\@\=(.+?)\@\>/gim,
evaluate: /\<\@([\s\S]+?)\@\>/gim,
escape: /\<\@\-(.+?)\@\>/gim
};
Проблема может быть решена путем побега <%
последовательность в коде:
<script id="tmpl" type="text/x-template">
<span>Hello, <\%=name%></span>
</script>
Так что вам не нужно менять логику движка шаблонов.
Другой вариант, который не требует глобальной замены, - указать интерполяцию и выполнить оценку для конкретного вызова метода.
_.template($("#template-id").html(),null, {
interpolate : /\{\{\=(.+?)\}\}/g,
evaluate: /\{\{(.+?)\}\}/g
});`