如果是Underscore.js中的条件语句

时间:2012-06-20 15:51:46

标签: javascript jquery backbone.js underscore.js

我正在使用underscorejs的_.template()函数和backbonejs。使用underscore.js v1.3.0时,我可以使用if语句,如下所示:

<script type="text/template" id="tpl_listing_list_item">
    <% if(<%= address_2 %>){%>, <%= address_2 %><%}%>
</script>

问题:更新到v1.3.3后,我在Javascript控制台中收到错误Uncaught SyntaxError: Unexpected token ILLEGAL。此功能已被删除吗?删除if代码可修复错误。如果它被删除了,还有另一种方法来实现同样的目标吗?

2 个答案:

答案 0 :(得分:8)

在您的if声明中,您已经转入插值模式,因此<%=是非法字符。

当我在1.3.3

的浏览器中使用它时,这是有效的
<script type="text/template" id="tpl_listing_list_item">
    <% if(address_2){ %>, <%= address_2 %> <% } %>
</script>

示例:

var t = _.template('{% if(address_2){ %}, {{ address_2 }} {% } %}')
undefined
t({'address_2': 'test'});
", test "

(我们使用JSP,因此我们的模板标记为{% %}{{ }}{%- %}而非默认值,因此请原谅我的标记)

答案 1 :(得分:8)

tkone没错,但对于像您这样的模板,您可以使用特殊的print function来清理您的代码:

  

您还可以在JavaScript代码中使用print。这有时比使用<%= ... %>更方便。

var compiled = _.template("<% print('Hello ' + epithet); %>");
compiled({epithet: "stooge"});
=> "Hello stooge."

所以你可以减少这样的噪音:

<script type="text/template" id="tpl_listing_list_item">
    <% if(address_2){ print(', ', address_2) } %>
</script>

演示:http://jsfiddle.net/ambiguous/UgATZ/

相关问题