Подтвердить что ты не робот

Шаблоны Underscore.js в JSP

Шаблоны Underscore.js используют <% =% > для переменной интерполяции. К сожалению, это также интерпретируется в JSP (или GSP). Есть ли способ использовать шаблоны Underscore.js в JSP?

4b9b3361

Ответ 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
 });`