R.E.M. Web Development

Handlebars - Calling a helper function from another helper

Here's  a helper that will create the options for a selectbox, you just pass in the selected value and the options. If the option values are different than the options text, then pass in a third param that has the text for each option.

 

Handlebars.registerHelper('selectBoxOptions', function(selectedValue, optionValues, optionTextStrings){

var html = "";
var value = null;
var text = null;
var selelctedAttr = "";

for(var x=0; x < optionValues.length; x++){

value = optionValues[x];

if(optionTextStrings && optionTextStrings[x]){

text = optionTextStrings[x]

}else{

text = value;

}

if(value == selectedValue){

selectedAttr = ' selected="selected" ';

}else{

selectedAttr = "";

}

html += '<option value="' + value +'"' + selectedAttr + '">' + text + "</option>";

}

return new Handlebars.SafeString(html);
});

 

Here's an example of how you might call this helper from another helper:

 

Handlebars.registerHelper('operatorOptions', function(dataType, selectedValue){

var options = [];

switch(dataType){
case "text":
options = ["contains", "does not contain", "is", "is not", "begins with","ends with"];
break;
case "number":
options = ["is", "is not", "greater than", "less than", "in range"];
break;
case "date":
options = ["is", "is not", "is before","is after", "in range"];
break;
case "boolean":
options = ["is", "is not"];
break;
default:
throw new Error("invalid data type");
}

return Handlebars.helpers.selectBoxOptions(selectedValue, options);

});