如何在underscore.js模板中使用if语句?

我正在使用underscore.js模板function,并做了这样的模板:

<script type="text/template" id="gridItem"> <div class="griditem <%= gridType %> <%= gridSize %>"> <img src="<%= image %>" /> <div class="content"> <span class="subheading"><%= categoryName %></span> <% if (date) { %><span class="date"><%= date %></span><% } %> <h2><%= title %></h2> </div> </div> </script> 

正如你所看到的,我有一个if语句,因为我所有的模型都没有date参数。 但是这样做的方式给了我一个错误的date is not defined 。 那么,如何在模板中声明呢?

这应该做的伎俩:

 <% if (typeof(date) !== "undefined") { %> <span class="date"><%= date %></span> <% } %> 

请记住,在underscore.js模板中, iffor只是包装在<% %>标记中的标准JavaScript语法。

如果你更喜欢更短的else语句,你可以使用这个简写:

 <%= typeof(id)!== 'undefined' ? id : '' %> 

这意味着显示ID是否有效,如果不是,则显示空白。

根据情况和/或你的风格,你可能也想在你的<% %>标签中使用print ,因为它允许直接输出。 喜欢:

 <% if (typeof(id) != "undefined") { print(id); } else { print('new Model'); } %> 

而对于原始代码片段进行连接:

 <% if (typeof(date) != "undefined") { print('<span class="date">' + date + '</span>'); } %> 

如果你需要包含一个空的检查,这里是一个简单的if / else检查在underscore.js。

 <div class="editor-label"> <label>First Name : </label> </div> <div class="editor-field"> <% if(FirstName == null) { %> <input type="text" id="txtFirstName" value="" /> <% } else { %> <input type="text" id="txtFirstName" value="<%=FirstName%>" /> <% } %> </div> 

为了回应上面的问题(关于如何划分一个人的结果),你可能已经find了你的答案(如果是这样的话,对你不要分享!),但最简单的方法是使用模数运算符。 比如说,你正在for循环中工作:

 <% for(i=0, l=myLongArray.length; i<l; ++i) { %> ... <% } %> 

在这个循环中,只需检查你的索引(我的情况)的值:

 <% if(i%2) { %>class="odd"<% } else { %>class="even" <% }%> 

这样做会检查我的索引的剩余部分除以2(每个索引行在1和0之间切换)。

你可以试试_.isUndefined

 <% if (!_.isUndefined(date)) { %><span class="date"><%= date %></span><% } %> 

从这里 :

“你也可以通过该对象引用数据对象的属性,而不是将它们作为variables访问。” 这意味着对于OP来说,这将起作用(与其他可能的解决scheme相比,其变化要小得多):

 <% if (obj.date) { %><span class="date"><%= date %></span><% } %>