May 8th, 2020 - written by Kimserey with .
Handlebars is a simple template engine which we can use to generate HTML content or other text format. Being very quick to use and understand makes it an ideal tool for projects needing the most common statements like conditions or loops. In today’s post we will look into Handlebars built in helpers with example.
Handlebars can be install from npm:
1
npm install handlebars --save
Then we can simply use it as such:
1
2
3
const Handlebars = require("handlebars");
const template = Handlebars.compile("Test {{value}}");
console.log(template({ value: "Hello World!" }));
We import handlebars using Node require and then use #.compile([template]) to compile a template which we can then render by calling it directly passing the properties needed for the template. This example will display the following in the console:
1
Test Hello World!
The braces are used to indicate the Handlebars expressions, {{value}} will look for a value property in the current context.
Nested objects are also supported:
1
2
const template = Handlebars.compile("Test {{address.name}} {{address.postalcode}}");
console.log(template({ name: "kimserey", postalcode: "123" }));
And arrays using the #.[n] notation:
1
2
3
4
5
6
const template = Handlebars.compile("{{names.[1].value}}");
console.log(
template({
names: [{ value: "Hello" }, { value: "world" }],
})
);
On top of accessing properties, Handlebars also comes with built-in helpers which provide conditional expressions.
if HelperThe support for if works as such:
1
2
3
4
5
6
const template = Handlebars.compile(`
{{#if condition}}
Hello World
{{/if}}
`);
console.log(template({ condition: true }));
each HelperThe other useful helper is each:
1
2
3
4
5
6
7
8
const template = Handlebars.compile(`
{{#each persons}}
{{name}} - {{age}}
{{/each}}
`);
console.log(template({ persons: [
{ name: "Kimserey", age: 32 }
]}));
This will print the following:
1
Kimserey - 32
each can also be used to iterate over properties:
1
2
3
4
5
6
const template = Handlebars.compile(`
{{#each this}}
{{@key}} - {{this}}
{{/each}}
`);
console.log(template({ name: "Kimserey", age: 32 }));
This will print the following:
1
2
name - Kimserey
age - 32
with HelperThe last helper we will be looking at is with which switches the context:
1
2
3
4
5
6
const template = Handlebars.compile(`
{{#with person}}
{{name}} - {{age}}
{{/with}}
`);
console.log(template({ person: { name: "Kimserey", age: 32 }}));
This allows us to not have to use access property simplifying the template.
Today we saw how to use Handlebars. We looked into if, else and with filters and how it could be used to render templates easily. I hope you liked this post and I see you on the next one.