Встроенные блочные вспомогательные функции
Набор встроенных блочных вспомогательных функций для шаблонизатора. Предоставляют функционал для работы с блоками.
if
Функция позволяет условно отображать блок. Если его аргумент возвращает false, undefined, null, "", или 0, шаблонизатор не отображает этот блок.
пример HTML
<div class="entry">
not_var{{#if author}}
<h1>{{firstName}} {{lastName}}</h1>
not_var{{/if}}
</div>
При использовании с контекстом
{
"author": true,
"firstName": "Иван",
"lastName": "Иванов"
}
Результат
<div class="entry">
<h1>Иван Иванов</h1>
</div>
Если аргумент возвращает false, шаблонизатор отобразит все, что находится между {{else}} и закрывающим тегом блочной вспомогательной функции.
пример HTML
<div class="entry">
not_var{{#if author}}
<h1>{{firstName}} {{lastName}}</h1>
{{else}}
<h1>Автор неизвестен</h1>
not_var{{/if}}
</div>
Для вложенных условий используется вспомогательный блок {{elseif}}.
пример HTML
<div class="order-status">
<h2>Заказ №{{orderId}}</h2>
not_var{{#if (eql status "delivered")}}
<p class="success">✅ Ваш заказ доставлен!</p>
not_var{{elseif (eql status "shipping")}}
<p class="info">🚚 Ваш заказ в пути...</p>
not_var{{elseif (eql status "cancelled")}}
<p class="danger">❌ Заказ отменен</p>
{{else}}
<p class="default">⚪ Статус неизвестен</p>
not_var{{/if}}
</div>
unless
Функция работает противоположно вспомогательной блочной функции if. Блок отображается, если выражение возвращает false.
пример HTML
<div class="entry">
not_var{{#unless license}}
<h3 class="warning">ПРЕДУПРЕЖДЕНИЕ: Этот проект не имеет лицензии!</h3>
not_var{{/unless}}
</div>
Если при поиске по текущему контексту значение license возвращает false, шаблонизатор отображает предупреждение. В противном случае ничего не выводится.
each
Функция перебирает список. Внутри блока используется {{this}} для обращения к текущему элементу.
пример HTML
<ul class="people_list">
not_var{{#each people}}
<li>{{this}}</li>
not_var{{/each}}
</ul>
При использовании с контекстом
{
"people": ["Иванов Иван", "Петров Петр"]
}
Результат
<ul class="people_list">
<li>Иванов Иван</li>
<li>Петров Петр</li>
</ul>
Можно использовать блок {{else}}, который отображается, когда список пуст.
пример HTML
not_var{{#each paragraphs}}
<p>{{this}}</p>
{{else}}
<p class="empty">Нет контента</p>
not_var{{/each}}
При переборе элементов через each можно переименовать текущий элемент, индекс с помощью атрибута as.
пример HTML
<ul class="people_list">
not_var{{#each people as |person index|}}
<li>{{index}}. {{person}}</li>
not_var{{/each}}
</ul>
repeat
Функция повторяет блок шаблона заданное количество раз. Это удобно для генерации однотипных элементов и создания заглушек.
пример HTML
<ul>
not_var{{#repeat 3 as |index|}}
<li>Элемент списка {{index}}</li>
not_var{{/repeat}}
</ul>
Результат
<ul>
<li>Элемент списка 0</li>
<li>Элемент списка 1</li>
<li>Элемент списка 2</li>
</ul>
with
Функция изменяет контекст вычисления шаблонного блока.
пример HTML
not_var{{#with person}}
{{firstname}} {{lastname}}
not_var{{/with}}
При использовании с контекстом
{
"person": {
"firstname": "Иван",
"lastname": "Иванов"
}
}
При работе с глубоко вложенными объектами*
not_var{{#with city.location}}
<p>{{lat}}, {{long}}</p>
not_var{{/with}}
Можно использовать блок {{else}}, который отображается, когда переданное значение не задано.
пример HTML
not_var{{#with city}}
{{city.name}} найден.
{{else}}
Город не найден.
not_var{{/with}}