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
 });`
Другие вопросы по тегам