JSP中的Underscore.js模板

ert*_*rne 27 jsp underscore.js

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

cod*_*man 74

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

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

那么你可以编写你的限定下划线变量,if和for语句<@ @>代替<% %>和不会与jsp冲突

  • 是的,它得到了回答,但这适用于那些宁愿拥有复制粘贴解决方案的编码员(比如我):) (27认同)

Upg*_*ave 24

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

   <@ 
      var numPages = 10;
      if ( numPages > 1 ) {
   @>
   <div><@=numPages@></div>
   <@}@>
Run Code Online (Sandbox Code Playgroud)

问题是正则表达式evaluate将不符合这里描述的换行符:Javascript正则表达式多行标志不起作用

那么,对我有用的解决方案是:

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

  • 谢谢你!我一直面临同样的问题 (3认同)

Zam*_*nji 16

根据您链接到的网页:

如果ERB样式的分隔符不是您的茶,您可以更改下划线的模板设置>使用不同的符号来设置插值代码.

它建议你改变interpolate和正则evaluate表达式.这意味着您可以将<%=%>用法更改为与JSP不冲突的内容.


And*_*pin 5

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

<script id="tmpl" type="text/x-template">
    <span>Hello, <\%=name%></span>
</script>
Run Code Online (Sandbox Code Playgroud)

因此,您无需更改任何模板引擎逻辑.