Ich verwende die Template-Funktion underscore.js und habe eine Vorlage wie diese erstellt:
<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>
Wie Sie sehen, habe ich eine if-Anweisung, da nicht alle meine Modelle den Datumsparameter haben. Diese Vorgehensweise gibt mir jedoch einen Fehler date is not defined
. Wie kann ich also vorgehen, wenn Anweisungen in einer Vorlage enthalten sind?
Dies sollte den Trick machen:
<% if (typeof(date) !== "undefined") { %>
<span class="date"><%= date %></span>
<% } %>
Denken Sie daran, dass in den Vorlagen "underscore.js" if
und for
nur Standard-JavaScript-Syntax sind, die in <% %>
Stichworte.
Wenn Sie eine kürzere if else-Anweisung bevorzugen, können Sie diese Abkürzung verwenden:
<%= typeof(id)!== 'undefined' ? id : '' %>
Dies bedeutet, dass die ID angezeigt wird, wenn sie gültig ist, und leer bleibt, wenn sie nicht gültig ist.
Abhängig von der Situation und Ihrem Stil können Sie auch print in Ihren <%
%>
- Tags verwenden, da dies eine direkte Ausgabe ermöglicht. Mögen:
<% if (typeof(id) != "undefined") {
print(id);
}
else {
print('new Model');
} %>
Und für das Original-Snippet mit einigen Verkettungen:
<% if (typeof(date) != "undefined") {
print('<span class="date">' + date + '</span>');
} %>
Hier ist eine einfache if/else-Prüfung in underscore.js, wenn Sie eine Nullprüfung einschließen müssen.
<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>
Wenn Sie oben auf blackdivine antworten (wie Sie die Ergebnisse streifen können), haben Sie möglicherweise bereits Ihre Antwort gefunden (wenn ja, schämen Sie sich, dass Sie nicht teilen!), Aber der einfachste Weg, dies zu tun, ist die Verwendung des Modulo-Operators. Angenommen, Sie arbeiten in einer for-Schleife:
<% for(i=0, l=myLongArray.length; i<l; ++i) { %>
...
<% } %>
Überprüfen Sie in dieser Schleife einfach den Wert Ihres Index (i, in meinem Fall):
<% if(i%2) { %>class="odd"<% } else { %>class="even" <% }%>
Dadurch wird der Rest meines Index durch zwei geteilt (zwischen 1 und 0 für jede Indexzeile umschalten).
Sie können versuchen _. IsUndefined
<% if (!_.isUndefined(date)) { %><span class="date"><%= date %></span><% } %>
Von hier :
"Sie können auch über dieses Objekt auf die Eigenschaften des Datenobjekts verweisen, anstatt als Variablen darauf zuzugreifen." Dies bedeutet, dass dies für den Fall von OP funktioniert (mit einer wesentlich geringeren Änderung als bei anderen möglichen Lösungen):
<% if (obj.date) { %><span class="date"><%= date %></span><% } %>
Um nach Nullwerten zu suchen, können Sie _.isNull
from offizielle Dokumentation
isNull_.isNull(object)
Gibt true zurück, wenn der Wert von object null ist.
_.isNull(null);
=> true
_.isNull(undefined);
=> false