Как использовать выражения if в шаблонах underscore.js?

Я использую функцию шаблона 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 is not defined. Итак, как я могу выполнять инструкции в шаблоне?

Ответ 1

Это должно сделать трюк:

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

Помните, что в шаблонах underscore.js if и for есть только стандартный синтаксис javascript, заключенный в теги <% %>.

Ответ 2

Если вы предпочитаете более короткий оператор if else, вы можете использовать это сокращение:

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

Это означает отображение идентификатора, если оно действительно и пустое, если оно не было.

Ответ 3

В зависимости от ситуации и вашего стиля вы также можете использовать print в тегах <% %>, так как это позволяет для прямого вывода. Как:

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

И для исходного фрагмента с некоторой конкатенацией:

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

Ответ 4

Вот простая проверка 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>

Ответ 5

Отвечая на blackdivine выше (о том, как полосать один результат), вы, возможно, уже нашли свой ответ (если это так, вам стыдно за то, что вы не делитесь!), но самый простой способ сделать это - использовать оператор модуля. скажем, например, вы работаете в цикле for:

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

В этом цикле просто проверьте значение вашего индекса (в моем случае):

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

Выполнение этого проверит остаток моего индекса, деленный на два (переключение между 1 и 0 для каждой строки индекса).

Ответ 6

Вы можете попробовать _. isUndefined

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

Ответ 7

Из здесь:

"Вы также можете ссылаться на свойства объекта данных через этот объект, вместо того, чтобы обращаться к ним как к переменным". Это означает, что для случая OP это будет работать (со значительно меньшим изменением, чем другие возможные решения):

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