if
block helper if
helper to conditionally render a block. If its argument returns false
, undefined
, null
, ""
, 0
, or []
, Handlebars will not render the block. <div class="entry"> {{#if author}} <h1>{{firstName}} {{lastName}}</h1> {{/if}} </div>
{}
) context, author
will be undefined
, resulting in: <div class="entry"> </div>
{{else}}
is called an "else section". <div class="entry"> {{#if author}} <h1>{{firstName}} {{lastName}}</h1> {{else}} <h1>Unknown Author</h1> {{/if}} </div>
unless
block helper unless
helper as the inverse of the if
helper. Its block will be rendered if the expression returns a falsy value. <div class="entry"> {{#unless license}} <h3 class="warning">WARNING: This entry does not have a license!</h3> {{/unless}} </div>
license
under the current context returns a falsy value, Handlebars will render the warning. Otherwise, it will render nothing. each
block helper each
helper. Inside the block, you can use this
to reference the element being iterated over. <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
expression in any context to reference the current context. {{else}}
section which will display only when the list is empty. {{#each paragraphs}} <p>{{this}}</p> {{else}} <p class="empty">No content</p> {{/each}}
each
, you can optionally reference the current loop index via {{@index}}
{{#each array}} {{@index}}: {{this}} {{/each}}
{{@key}}
references the current key name: {{#each object}} {{@key}}: {{this}} {{/each}}
@first
and @last
variables when iterating over an array. When iterating over an object only the @first
is available. each
blocks may access the iteration variables via depth based paths. To access the parent index, for example, {{@../index}}
can be used. each
helper also supports block parameters, allowing for named references anywhere in the block. {{#each array as |value key|}} {{#each child as |childValue childKey|}} {{key}} - {{childKey}}. {{childValue}} {{/each}} {{/each}}
key
and value
variable that children may access without the need for depthed variable references. In the example above, {{key}}
is identical to {{@../key}}
but in many cases is more readable. with
Block Helper var source = "<p>{{lastName}}, {{firstName}}</p>"; var template = Handlebars.compile(source); template({firstName: "Alan", lastName: "Johnson"});
<p>Johnson, Alan</p>
with
block helper. <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
can also be used with block parameters to define known references in the current block. The example above can be converted to <div class="entry"> <h1>{{title}}</h1> {{#with author as |myAuthor|}} <h2>By {{myAuthor.firstName}} {{myAuthor.lastName}}</h2> {{/with}} </div>
../
depthed references allow for. {{else}}
section which will display only when the passed value is empty. {{#with author}} <p>{{name}}</p> {{else}} <p class="empty">No content</p> {{/with}}
lookup
helper lookup
helper allows for dynamic parameter resolution using Handlebars variables. This is useful for resolving values for array indexes. {{#each bar}} {{lookup ../foo @index}} {{/each}}
log
block helper log
helper allows for logging of context state while executing a template. {{log "Look at me!"}}
Handlebars.logger.log
which may be overriden to perform custom logging. {{log "This is logged" foo "And so is this"}}
level
hash parameter. Supported values are debug
, info
, warn
, and error
. When omitted, info
is the default value, {{log "Log!" level="error"}}
Handlebars.logger.level
, which defaults to info
. All log statements at or above the current level will be output. blockHelperMissing
helper {{#foo}}{{/foo}}
foo
on the current context and the options.name
field set to "foo"
. For instances where there is no registered helper named foo
. Handlebars.registerHelper('blockHelperMissing', function(context, options) { throw new Handlebars.Exception('Only if or each is allowed'); });
if
and each
helpers. helperMissing
helper blockHelperMissing
helper. {{foo}} {{foo bar}} {{#foo}}{{/foo}}
knownHelpersOnly
mode. 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