I\'m using handlebars.js and I want to start precompiling everything, but I can\'t seem to find a way to precompile the partials. The majority of my templates are actually parti
Still not sure about precompiling partials, but this is how to call one template from within another template with help from this question: Handlebars helper for template composition
// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function(templateName,context){
return new Handlebars.SafeString(Handlebars.templates[templateName](this));
});
http://jsfiddle.net/EBt8R/
I found an even better method: precompile all your partials as templates, then right before you use them in your code, add this line:
Handlebars.partials = Handlebars.templates;
The improvements are 1) it's shorter and 2) it doesn't loose any custom helpers you might pass in when calling the parent template.
I am using HandleBars v3.0.3 and I have partial and not partial templates pre-compiled in one file.
This thread is little bit confusing so I am summarizing the working solution.
I managed to get it working by pre compiling all my partials as templates and then adapting Nathans solution
// instead of {{> partialName}} use {{partial "templateName"}}
Handlebars.registerHelper('partial', function (templateName) {
return new Handlebars.SafeString(JST[templateName](this));
});
So for me Handlebars.templates
became JST
when i compiled things, i noticed it in my compiled templates file.
Instead of replacing all the registered partials I recommend instead explicitly adding the partials, possibly filtering them as well such as:
Object.entries(Handlebars.templates).forEach(([k, v]) => { if ( k.indexOf('partial') != -1 ) Handlebars.partials[k] = v })
In this case we only insert precompiled templates that contain "partial" in the name. This would allow you to either store these in a partials/
subfolder or within the name such as some-partial.hbs
for(let [name, template] of Object.entries(handlebars.partials)) {
handlebars.partials[name] = handlebars.compile(template);
}