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

Nyx*_*nyx 7 javascript jquery backbone.js underscore.js

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

<script type="text/template" id="tpl_listing_list_item">
    <% if(<%= address_2 %>){%>, <%= address_2 %><%}%>
</script>
Run Code Online (Sandbox Code Playgroud)

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

tko*_*one 8

在你的if陈述中,你已经逃脱了插值模式,所以这<%=是一个非法的角色.

当我在1.3.3的浏览器中使用它时,这可以工作

<script type="text/template" id="tpl_listing_list_item">
    <% if(address_2){ %>, <%= address_2 %> <% } %>
</script>
Run Code Online (Sandbox Code Playgroud)

例:

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

(我们使用JSP所以我们的模板标签{% %},{{ }}{%- %}而不是默认值,所以原谅我的标签)


mu *_*ort 8

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

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

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

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

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

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

  • @tkone:你通过一直引用答案中的文档来学习各种各样的东西:) (2认同)