Underscore.js 模板使用 <%= %> 进行变量插值。不幸的是,这也会在 JSP(或 GSP)中被解释。有没有一种方法可以在 JSP 中使用 Underscore.js 模板?
Underscore.js 模板使用 <%= %> 进行变量插值。不幸的是,这也会在 JSP(或 GSP)中被解释。有没有一种方法可以在 JSP 中使用 Underscore.js 模板?
_.templateSettings = {
interpolate: /\<\@\=(.+?)\@\>/gim,
evaluate: /\<\@(.+?)\@\>/gim,
escape: /\<\@\-(.+?)\@\>/gim
};
然后,您可以使用<@ @>
代替<% %>
编写您的限定下划线变量、if和for语句,这样就不会与jsp发生冲突。
@coderman提供的示例很有帮助,但不幸的是,如果你想在模板中使用换行符,它就无法正常工作。例如:
<@
var numPages = 10;
if ( numPages > 1 ) {
@>
<div><@=numPages@></div>
<@}@>
问题在于evaluate
的正则表达式无法像这里描述的那样跨越换行符匹配:JavaScript正则表达式多行标志不起作用
因此,对我有效的解决方案是:
_.templateSettings = {
interpolate: /\<\@\=(.+?)\@\>/gim,
evaluate: /\<\@([\s\S]+?)\@\>/gim,
escape: /\<\@\-(.+?)\@\>/gim
};
注意:在 evaluate 正则表达式中,[\s\S]
是关键点。
<%
序列来解决:<script id="tmpl" type="text/x-template">
<span>Hello, <\%=name%></span>
</script>
另一个不需要全局替换的选项是指定插值和求值到特定的方法调用
_.template($("#template-id").html(),null, {
interpolate : /\{\{\=(.+?)\}\}/g,
evaluate: /\{\{(.+?)\}\}/g
});`