JSP中的Underscore.js模板

时间:2011-04-24 16:27:18

标签: jsp underscore.js

Underscore.js templates使用<%=%>用于变量插值。不幸的是,这也是在JSP(或GSP)中解释的。有没有办法在JSP中使用Underscore.js模板?

5 个答案:

答案 0 :(得分:73)

在jsp页面中添加以下插值和评估设置

_.templateSettings = {
    interpolate: /\<\@\=(.+?)\@\>/gim,
    evaluate: /\<\@(.+?)\@\>/gim,
    escape: /\<\@\-(.+?)\@\>/gim
};

然后你可以编写你的限定下划线变量,if和for <@ @>而不是<% %>的语句,并且不会与jsp冲突

答案 1 :(得分:23)

@ coderman的示例很有帮助,但不幸的是,如果您想在模板中使用换行符,它就不起作用。例如:

   <@ 
      var numPages = 10;
      if ( numPages > 1 ) {
   @>
   <div><@=numPages@></div>
   <@}@>

问题是,evaluate的正则表达式与新行不匹配,如下所述:Javascript regex multiline flag doesn't work

所以,对我有用的解决方案是:

_.templateSettings = {
    interpolate: /\<\@\=(.+?)\@\>/gim,
    evaluate: /\<\@([\s\S]+?)\@\>/gim,
    escape: /\<\@\-(.+?)\@\>/gim
};

答案 2 :(得分:16)

根据您关联的网页:

  

如果ERB风格的分隔符不是您的茶,您可以更改Underscore的模板设置&gt;以使用不同的符号来设置插值代码。

它建议您更改interpolateevaluate正则表达式。 这意味着您可以更改&lt;%=%&gt;用于与JSP不冲突的东西。

答案 3 :(得分:5)

可以通过在代码中转义<%序列来解决问题:

<script id="tmpl" type="text/x-template">
    <span>Hello, <\%=name%></span>
</script>

因此,您不需要更改任何模板引擎逻辑。

答案 4 :(得分:0)

另一个不需要全局替换的选项是指定插值并计算特定的方法调用

 _.template($("#template-id").html(),null, {
   interpolate :  /\{\{\=(.+?)\}\}/g,
   evaluate: /\{\{(.+?)\}\}/g
 });`