我正在使用 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 语句?
这应该可以解决问题:
<% if (typeof(date) !== "undefined") { %>
<span class="date"><%= date %></span>
<% } %>
请记住,在 underscore.js 中,模板 if
和 for
只是包装在 <% %>
标记中的标准 JavaScript 语法。
如果你喜欢更短的 if else 语句,你可以使用这个简写:
<%= typeof(id)!== 'undefined' ? id : '' %>
这意味着如果有效则显示 id,如果无效则显示空白。
_.template
在每个已编译代码标记的开头插入一个 ;
。因此,它可以处理语句之间的标签中断,但不能处理表达式内部的标签。比较 ;if(a){b;}else{c;}
和 ;a?b;:c;
。
根据情况和/或您的风格,您可能还想在 <%
%>
标记中使用 print,因为它允许直接输出。喜欢:
<% if (typeof(id) != "undefined") {
print(id);
}
else {
print('new Model');
} %>
对于带有一些连接的原始片段:
<% if (typeof(date) != "undefined") {
print('<span class="date">' + date + '</span>');
} %>
下面是 underscore.js 中的一个简单 if/else 检查,如果您需要包含一个空检查。
<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>
_.isEmpty()
回应上面的 blackdivine(关于如何对结果进行条带化),您可能已经找到了答案(如果是这样,为您不分享而感到羞耻!),但最简单的方法是使用模运算符。比如说,你正在一个 for 循环中工作:
<% for(i=0, l=myLongArray.length; i<l; ++i) { %>
...
<% } %>
在该循环中,只需检查索引的值(在我的情况下为 i):
<% if(i%2) { %>class="odd"<% } else { %>class="even" <% }%>
这样做将检查我的索引的其余部分除以 2(每个索引行在 1 和 0 之间切换)。
你可以试试_.isUndefined
<% if (!_.isUndefined(date)) { %><span class="date"><%= date %></span><% } %>
date
根本不存在,您建议的代码仍会引发异常。在这种情况下,您确实需要 typeof
,尽管在我们对模板数据进行鸭式输入时使用命名变量会更好。
从 here:
“您还可以通过该对象引用数据对象的属性,而不是将它们作为变量进行访问。”这意味着对于 OP 的情况,这将起作用(与其他可能的解决方案相比,变化要小得多):
<% if (obj.date) { %><span class="date"><%= date %></span><% } %>
要检查空值,您可以使用 official documentation 中的 _.isNull
isNull_.isNull(object)
如果 object 的值为 null,则返回 true。
_.isNull(null);
=> true
_.isNull(undefined);
=> false
不定期副业成功案例分享
:nth-child(even)
和:nth-child(odd)
CSS 选择器,而不是更改模板。