Underscore.js templates使用<%=%>用于变量插值。不幸的是,这也是在JSP(或GSP)中解释的。有没有办法在JSP中使用Underscore.js模板?
答案 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;以使用不同的符号来设置插值代码。
它建议您更改interpolate
和evaluate
正则表达式。
这意味着您可以更改&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
});`