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

我使用了underscore.js的模板函数,并做了一个这样的模板:

<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语句呢?

163334 次浏览

这应该可以达到目的:

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

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

根据情况和或你的风格,你可能还想在你的<% %>标记中使用打印,因为它允许直接输出。如:

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

对于一些连接的原始片段:

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

如果你喜欢更短的If else语句,你可以使用下面的简写:

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

这意味着如果id有效,则显示id,如果无效,则显示为空。

回应上面的blackdivine(关于如何条纹一个人的结果),你可能已经找到了你的答案(如果是这样,你不分享真可耻!),但最简单的方法是使用模运算符。例如,你在一个for循环中工作:

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

在循环中,简单地检查索引的值(在我的例子中是i):

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

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

这里是一个简单的if/else检查下划线.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>

你可以试试_.isUndefined

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

在这里:

“您还可以通过该对象引用数据对象的属性,而不是作为变量访问它们。”这意味着对于OP的情况,这将起作用(与其他可能的解决方案相比,变化明显较小):

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

要检查空值,可以使用官方文档中的_.isNull

isNull_.isNull(object)

如果object的值为空,则返回true。

_.isNull(null);
=> true
_.isNull(undefined);
=> false