Spec-Zone.ru › Handlebars.js

Встроенные помощники

Помощник блока 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API