Встроенные помощники
Помощник блока if
Вы можете использовать помощник
if для условного рендеринга блока. Если его аргумент возвращает false, undefined, null, "", 0, или [], Handlebars не будут рендерить блок. <div class="entry">
{{#if author}}
<h1>{{firstName}} {{lastName}}</h1>
{{/if}}
</div>
При использовании с пустым (
{}) контекстом, author будет undefined, что приведет к: <div class="entry"> </div>
При использовании выражения блока, вы можете указать раздел шаблона, который будет выполнен, если выражение возвращает ложное значение. Этот раздел, помеченный
{{else}}, называется "else-разделом". <div class="entry">
{{#if author}}
<h1>{{firstName}} {{lastName}}</h1>
{{else}}
<h1>Unknown Author</h1>
{{/if}}
</div>
Помощник блока unless
Вы можете использовать помощник
unless как обратное значение помощника if. Его блок будет рендериться, если выражение возвращает ложное значение. <div class="entry">
{{#unless license}}
<h3 class="warning">WARNING: This entry does not have a license!</h3>
{{/unless}}
</div>
Если поиск
license в текущем контексте возвращает ложное значение, Handlebars отобразит предупреждение. В противном случае ничего не будет отображено. Помощник блока each
Вы можете итерироваться по списку, используя встроенный помощник
each. Внутри блока вы можете использовать this для ссылки на итерируемый элемент. <ul class="people_list">
{{#each people}}
<li>{{this}}</li>
{{/each}}
</ul>
При использовании с этим контекстом:
{
people: [
"Yehuda Katz",
"Alan Johnson",
"Charles Jolley"
]
}
Результат будет:
<ul class="people_list"> <li>Yehuda Katz</li> <li>Alan Johnson</li> <li>Charles Jolley</li> </ul>
Вы можете использовать выражение
this в любом контексте для ссылки на текущий контекст. Вы можете необязательно предоставить раздел
{{else}}, который будет отображаться только когда список пуст. {{#each paragraphs}}
<p>{{this}}</p>
{{else}}
<p class="empty">No content</p>
{{/each}}
При проходе по элементам в
each, вы можете необязательно обратиться к текущему индексу цикла через {{@index}} {{#each array}}
{{@index}}: {{this}}
{{/each}}
Кроме того, для итерации по объектам,
{{@key}} ссылается на текущее имя ключа: {{#each object}}
{{@key}}: {{this}}
{{/each}}
Первые и последние шаги итерации отмечаются переменными
@first и @last при итерации по массиву. При итерации по объекту доступна только переменная @first. Вложенные блоки
each могут получить доступ к переменным итерации через пути на основе глубины. Например, для доступа к родительскому индексу можно использовать {{@../index}}. Помощник
each также поддерживает параметры блока, что позволяет использовать именованные ссылки в любом месте блока. {{#each array as |value key|}}
{{#each child as |childValue childKey|}}
{{key}} - {{childKey}}. {{childValue}}
{{/each}}
{{/each}}
Создаст переменные
key и value, к которым потомки могут получить доступ без необходимости использования отсылок по глубине. В приведенном выше примере {{key}} идентичен {{@../key}}, но во многих случаях более читаем. Помощник блока with
Обычно шаблоны Handlebars оцениваются относительно контекста, переданного в компилированный метод.
var source = "<p>{{lastName}}, {{firstName}}</p>";
var template = Handlebars.compile(source);
template({firstName: "Alan", lastName: "Johnson"});
приводит к
<p>Johnson, Alan</p>
Вы можете изменить контекст для раздела шаблона, используя встроенный помощник блока
with. <div class="entry">
<h1>{{title}}</h1>
{{#with author}}
<h2>By {{firstName}} {{lastName}}</h2>
{{/with}}
</div>
При использовании с этим контекстом:
{
title: "My first post!",
author: {
firstName: "Charles",
lastName: "Jolley"
}
}
Результат будет:
<div class="entry"> <h1>My first post!</h1> <h2>By Charles Jolley</h2> </div>
with также может использоваться с параметрами блока для определения известных ссылок в текущем блоке. Приведенный выше пример можно преобразовать в <div class="entry">
<h1>{{title}}</h1>
{{#with author as |myAuthor|}}
<h2>By {{myAuthor.firstName}} {{myAuthor.lastName}}</h2>
{{/with}}
</div>
Что позволяет создавать сложные шаблоны с потенциально более понятным кодом, чем ссылки по глубине
../ позволяют. Вы можете необязательно предоставить раздел
{{else}}, который будет отображаться только когда переданное значение пустое. {{#with author}}
<p>{{name}}</p>
{{else}}
<p class="empty">No content</p>
{{/with}}
Помощник lookup
Помощник
lookup позволяет динамически разрешать параметры, используя переменные Handlebars. Это полезно для разрешения значений для индексов массивов. {{#each bar}}
{{lookup ../foo @index}}
{{/each}}
Помощник блока log
Помощник
log позволяет регистрировать состояние контекста во время выполнения шаблона. {{log "Look at me!"}}
Делегирует вызов
Handlebars.logger.log, который можно переопределить для выполнения пользовательской регистрации. Любое количество аргументов может быть передано в этот метод, и все они будут перенаправлены в логгер.
{{log "This is logged" foo "And so is this"}}
Уровень регистрации может быть установлен с помощью параметра хеша
level. Поддерживаемые значения: debug, info, warn, и error. По умолчанию, если параметр не указан, используется значение info. {{log "Log!" level="error"}}
Ведение журнала осуществляется условно на основе уровня и значения, установленного в
Handlebars.logger.level, которое по умолчанию равно info. Все записи в журнале уровня текущего и выше будут выведены. Помощник blockHelperMissing
Неявно вызывается, когда помощник не может быть непосредственно разрешен в хэше помощников среды.
{{#foo}}{{/foo}}
вызовет этого помощника со значением
foo, разрешенным в текущем контексте, и полем options.name установленным в "foo". В случаях, когда нет зарегистрированного помощника с именем foo. Это может быть переопределено пользователями, которые хотят изменить поведение оценки блока. Например
Handlebars.registerHelper('blockHelperMissing', function(context, options) {
throw new Handlebars.Exception('Only if or each is allowed');
});
может быть использовано для предотвращения использования оценки блоков в стиле mustache в пользу более эффективных помощников
if и each. Помощник helperMissing
Внутренний помощник, который вызывается, когда потенциальное выражение помощника не было найдено ни в хэше помощников среды, ни в текущем контексте. В случаях, когда оба выполняются, этот помощник выполняется до помощника
blockHelperMissing. {{foo}}
{{foo bar}}
{{#foo}}{{/foo}}
Каждый вызов вызовет этого помощника, передавая любые аргументы, которые в противном случае были бы переданы помощнику с тем же именем. Этот помощник не вызывается при использовании режима
knownHelpersOnly. Это может быть переопределено приложениями. Чтобы принудительно создать поле, можно использовать следующее:
Handlebars.registerHelper('helperMissing', function(/* [args, ] options */) {
var options = arguments[arguments.length - 1];
throw new Handlebars.Exception('Unknown field: ' + options.name);
});
© 2011–2017 by Yehuda Katz
Licensed under the MIT License.
https://handlebarsjs.com/builtin_helpers.html