2012-06-20 14 views
7

条件语句我使用underscorejs的_.template()功能与backbonejs在一起。当使用underscore.js V1.3.0,我可以用一个if声明如下所示:如果Underscore.js

<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代码修正错误。如果它被删除,是否有另一种方式来实现相同的事情?

回答

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

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/

+0

还没有收到有关的'print'功能的线索。每天学些新东西! – tkone

+2

@tkone:你学习各种各样的事情在回答所有的时间引用文档:) –