7

我将_.template()underscorejs的功能与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 后,我Uncaught SyntaxError: Unexpected token ILLEGAL在 Javascript 控制台中收到错误消息。此功能是否已删除?删除if代码可修复错误。如果将其删除,是否有另一种方法可以实现相同的目标?

4

2 回答 2

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,所以我们的模板标签是{% %}, {{ }}, 而{%- %}不是默认值,所以请原谅我的标签)

于 2012-06-20T16:01:02.330 回答
8

tkone是对的,但是对于像您这样的模板,您可以使用特殊print功能来清理标签:

您也可以print在 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>

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

于 2012-06-20T16:46:57.980 回答