I am working with Handlebars.js template engine and am trying to figure out a way to do something like this (contrived example):
{{#if itemSelected "SomeItem"}}
<div>This was selected</div>
{{/if}
where itemSelected
is a registered helper like this:
Handlebars.registerHelper("itemSelected", function(item) {
var selected = false;
// Lots of logic that determines if item is selected
return selected;
});
I get errors when trying to use this syntax for the template, and I cannot find any example showing this kind of thing. I do see simple #if blocks like this...
{{#if myValueInContext}}
<div>This will show if myValueInContext results in a truthy value.</div>
{{/if}}
But, I can't figure out how to tackle the first example. Maybe I am approaching this wrong.
By the way, I tagged this Mustache as I could not add a Handlebars tag to the question.
With last version (1.0.rc.1) of Handlebars, you have to write sth like:
ie. block(this) is replaced by options.fn(this)
http://handlebarsjs.com/block_helpers.html#conditionals
I don't think this is going to work. If I understand the handlebars documentation correct, the #if is a registered block-helper itself and does not take another registered helper as an argument.
According to the documentation you might implement it like that
Afterwards you should be able to call it with
but you have to make sure SomeItem has the proper format. I don't see a way to use a registered handler as conditional in an if-statement.
If you want to have an else option too, you will need this code:
Used with:
You should add parentheses around the embedded helper invocation:
I did experiments and verified that it just works.
Not sure if it's mentioned in the Handlebars documentation. I learned the trick from the examples of handlebars-layouts.