Using Partial in Handlebars and Reusing Code
Open Event Webapp uses handlebar partials for optimizing code. We can reuse a template using Handlebars partial.
How to use Handlebars partial ?
To use Handlebars partial, we have to follow some easy steps:
Step 1: In the .hbs file containing code, register your partial by using function Handlebars.registerPartial
Handlebars.registerPartial('myPartial', '{{name}}')
Step 2: Calling the partial
{{> myPartial }}
In Open-Event Webapp we have made partials for common templates like navbar and footer.
1. // Navbar template (navbar.hbs) <!-- Fixed navbar --> <nav class="navbar navbar-default navbar-fixed-top"> <div class="container"> <div class="navbar-header navbar-left pull-left"> <a class="navbar-brand" href="{{ eventurls.main_page_url }}"> {{#if eventurls.logo_url}} <img alt="{{eventurls.name}}" class="logo logo-dark" src="{{ eventurls.logo_url }}"> {{else}} {{ eventurls.name }} {{/if}} </a> </div> <div class="navbar-header navbar-right pull-right"> <ul style="margin-left:20px" class="nav navbar-nav pull-left"> {{#sociallinks}} {{#if show}} <li class="pull-left"><a href="{{link}}" style="padding-right:0; padding-left:0;margin-left:15px"><i class="fa fa-lg fa-{{icon}}" aria-hidden="true" title="{{{icon}}}"></i></a></li> {{/if}} {{/sociallinks}} </ul> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse" style="margin-left:1em;margin-top:1em;"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="hidden-lg hidden-md hidden-sm clearfix"></div> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav navbar-right"> <li class="navlink"><a id="homelink" href="index.html">Home</a> {{#if timeList}} <li class="navlink"> <a id="schedulelink"href="schedule.html"> Schedule</a> </li> {{/if}} {{#if tracks}} <li class="navlink"> <a id="trackslink" href="tracks.html">Tracks</a> </li> {{/if}} {{#if roomsinfo}} <li class="navlink"> <a id="roomslink" href="rooms.html">Rooms</a> </li> {{/if}} {{#if speakerslist}} <li class="navlink"> <a id="speakerslink" href="speakers.html">Speakers</a> </li> {{/if}} </ul> </div> </div> </nav>
//Compiling Template by providing path 2. const navbar = handlebars.compile(fs.readFileSync(__dirname + '/templates/partials/navbar.hbs').toString('utf-8'));
// Register Partial 3. handlebars.registerPartial('navbar', navbar);