5

我试图让 if/else interpolate 与 Underscore.js 和 HAML 一起工作,但无济于事。我已经将 Underscore.js 中的插值设置更改为以下内容:

_.templateSettings = {
  interpolate : /\{\{([\s\S]+?)\}\}/g
};

当我试图在像 {{ value }} 这样的符号中插入一个值时,这很有效。但是,我无法使 if/else 语句起作用。我有以下内容:

{{ if (true) { }}
  {{ val }}
{{ } }}

我收到一个 Javascript 异常“Uncaught SyntaxError: Unexpected token if”。非常感谢您的帮助。

4

1 回答 1

10

下划线模板使用三组不同的分隔符:

  1. evaluate<% ... %>:默认情况下,这是用于 JavaScript 的位。
  2. interpolate<%= ... %>:默认情况下,这是用于转储变量的内容。
  3. escape: 作为interpolate但也转义 HTML,<%- ... %>默认情况下。

这些大多匹配 ERB 语法。您正在尝试将插值语法与不是表达式的 JavaScript 一起使用:

{{ if(true) { }}

但这不起作用,因为if它不是 JavaScript 中的表达式。

您可能想要覆盖所有三种模式:

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

然后这样说:

{{ if (true) { }}
  {{= val }}
{{ } }}

如果您可以将模板限制为简单的替换,那么您可以在模板中使用interpolate{{expr}}

于 2012-10-15T23:41:05.577 回答