Conditionals
Statements like if
and unless
are implemented as built-in helpers. Helpers can be invoked three ways, each of which is illustrated below with conditionals.
The first style of invocation is inline invocation. This looks similar to displaying a property, but helpers accept arguments. For example:
<div> {{if isFast "zoooom" "putt-putt-putt"}} </div>
{{if}}
in this case returns "zoooom"
when isFast
is true and "putt-putt-putt"
when isFast
is false. Helpers invoked as inline expressions render a single value, the same way that properties are a single value.
Inline helpers don't need to be used inside HTML tags. They can also be used inside attribute values:
<div class="is-car {{if isFast "zoooom" "putt-putt-putt"}}"> </div>
Nested invocation is another way to use a helper. Like inline helpers, nested helpers generate and return a single value. For example, this template only renders "zoooom"
if both isFast
and isFueled
are true:
<div> {{if isFast (if isFueled "zoooom")}} </div>
The nested helper is called first returning "zoooom"
only if isFueled
is true. Then the inline expression is called, rendering the nested helper's value ("zoooom"
) only if isFast
is true.
The third form of helper usage is block invocation. Use block helpers to render only part of a template. Block invocation of a helper can be recognized by the #
before the helper name, and the closing {{/
double curly brace at the end of the invocation.
For example, this template conditionally shows properties on person
only if that it is present:
{{#if person}} Welcome back, <b>{{person.firstName}} {{person.lastName}}</b>! {{/if}}
{{if}}
checks for truthiness, which means all values except false
, undefined
, null
, ''
, 0
or []
(i.e., any JavaScript falsy value or an empty array).
If a value passed to {{#if}}
evaluates to falsy, the {{else}}
block of that invocation is rendered:
{{#if person}} Welcome back, <b>{{person.firstName}} {{person.lastName}}</b>! {{else}} Please log in. {{/if}}
{{else}}
can chain helper invocation, the most common usecase for this being {{else if}}
:
{{#if isAtWork}} Ship that code! {{else if isReading}} You can finish War and Peace eventually... {{/if}}
The inverse of {{if}}
is {{unless}}
, which can be used in the same three styles of invocation. For example, this template only shows an amount due when the user has not paid:
{{#unless hasPaid}} You owe: ${{total}} {{/unless}}
Please login to continue.