Handlebars.js is a template framework for Javascript environments. It allows the construction of HTML elements using HTML and expressions wrapped in {{ }}
One of the conditional block helpers Handlebars offers is the {{#if}}
.
For example:
<div class="entry">
{{#if author}}
<h1>{{firstName}} {{lastName}}</h1>
{{else}}
<h1>Unknown Author</h1>
{{/if}}
</div>
Unfortunately, that's about all you can do with the if
out of the box. Luckily, Handlebars provides means of working with such expressions as well as adding your own. Using the registerHelper
method, we will change the if
block to support testing for property equality.
To do so, we will pass registerHelper
a modified version of the if
function where we utilize Handlebars' ability to parse key-value attributes in expressions:
Handlebars.registerHelper("if", function(conditional, options) {
if (options.hash.desired === options.hash.type) {
options.fn(this);
} else {
options.inverse(this);
}
});
Now, our modified if
expressions look something like this:
{{#if type desired="image" type=type}}
<div class="msg img">
<strong>{{user}}</strong> <i>shared an image</i>
<br />
<a href="{{file}}"><img src="{{file}}" /></a>
</div>
{{/if}}
where type
is a property of this
in our current scope, and "image"
is a possible value for type
.
Of course, you may want to define your own block expression instead of overriding the default {{#if}}
, but the idea holds.
Handlebars is a piece of s....t and I for one, completely refuse to use it and also divert anybody form ever using it. The first statement on this page sounds like a corporate bullcrap that you see everywhere. "Luckily, Handlebars provides means of working with such expressions". WAIT WHAT?????? the simplest operator comparison function in any langues was omitted but you allow me to add that functionality, by writing an extra 6 lines of code for every time I need this done. WOW thanks for such a privilege. DO YOURSELF A FAVOR AND DO NOT USE THIS TEMPLATING ENGINE. even JADE with its god awful white space fiasco is better than this turd. From the bottom of my heart. --virgil