JSP 中的 Underscore.js 模板

发布于 2024-11-03 16:18:10 字数 187 浏览 0 评论 0原文

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

Underscore.js templates use <%= %> for variable interpolation. Unfortunately that is also interpreted in a JSP (or GSP). Is there a way to use Underscore.js templates within JSPs?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

鹿港小镇 2024-11-10 16:18:10

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

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

,然后您可以使用 <@ @> 而不是 <% %>< 编写限定下划线变量、if 和 for 语句/code> 不会与jsp冲突

Add the following interpolate and evaluate settings in your jsp page

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

then you can write your qualify underscore variables,if and for statements with <@ @> instead of <% %> and will not conflict with jsp

陈年往事 2024-11-10 16:18:10

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

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

问题是 evaluate 的正则表达式不会跨换行符匹配,如下所述:JavaScript 正则表达式多行标志不起作用

因此,对我有用的解决方案是:

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

注意[\s\S] 在评估正则表达式中。这就是关键。

@coderman's example was helpful, but, unfortunately, it doesn't work if you want to use newlines in your templates. For example:

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

The problem is that the regex for evaluate won't match across newlines as described here: JavaScript regex multiline flag doesn't work

So, the solution that worked for me is:

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

NOTE: [\s\S] in the evaluate regexp. That's the key.

鹿! 2024-11-10 16:18:10

根据您链接到的网页:

如果您不喜欢 ERB 样式的分隔符,您可以更改 Underscore 的模板设置 > 以使用不同的符号来引发内插代码。

它建议您更改 interpolateevaluate 正则表达式。
这意味着您可以更改 <%= %>用法与 JSP 不冲突。

According to the webpage you linked to:

If ERB-style delimiters aren't your cup of tea, you can change Underscore's template settings >to use different symbols to set off interpolated code.

It suggests you change the interpolate and evaluate regexes.
This means you can change the <%= %> usage to something that doesn't conflict with JSP.

述情 2024-11-10 16:18:10

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

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

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

The problem can be solved by escaping <% sequence in code:

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

So you don't need to change any template engine logics.

森林很绿却致人迷途 2024-11-10 16:18:10

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

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

Another option that doesn't require global replace is to specify the interpolate and evaluate to specific method invocation

 _.template($("#template-id").html(),null, {
   interpolate :  /\{\{\=(.+?)\}\}/g,
   evaluate: /\{\{(.+?)\}\}/g
 });`
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文