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