我正在使用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
代码可修复错误。如果它被删除了,还有另一种方法来实现同样的目标吗?
答案 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代码中使用
<%= ... %>
更方便。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>