如何使用Underscore.js和HAML插入if / else语句?

时间:2012-10-15 23:07:03

标签: ruby-on-rails underscore.js haml interpolation underscore.js-templating

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

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

当我尝试在{{value}}之类的符号中插入值时,这很有效。但是,我没有使if / else语句有效。我有以下内容:

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

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

1 个答案:

答案 0 :(得分:10)

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

  1. evaluate:这是针对JavaScript的一些内容,默认为<% ... %>
  2. interpolate:这是为了默认转储变量<%= ... %>的内容。
  3. escape:作为interpolate,但也会转义HTML,默认为<%- ... %>
  4. 这些大多与ERB语法相匹配。您尝试使用不是表达式的JavaScript的插值语法:

    {{ if(true) { }}
    

    但是,if不能用作JavaScript中的表达式。

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

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

    然后说出这样的话:

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

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