Handlebars Template Engine for Brick.js.
demo/
directory contains a demo project. Run the demo:
git clone [email protected]:brick-js/brick-hbs.git
cd brick-hbs && npm install
cd demo && npm install
grunt
Open http://localhost:3000 in your browser!
npm install -S brick-hbs
var brickJs = require('brick.js');
var Hbs = require('brick-hbs');
var brk = brickJs({
view: ['view.hbs', 'view.html']
});
var hbs = Hbs.brick({
cache: false // disabled by default, see below
})
brk.engine('.hbs', hbs); // set hbs engine for .hbs file
brk.engine('.html', hbs); // set hbs engine for .html file
app.use('/', brk.express);
In Brick.js, partials are organized as modules. Eg:
File footer/view.hbs
in module footer
:
<footer> Powered by Brick.js </footer>
File home/view.hbs
in module home
:
<html>
<body>
<p>Demo Page</p>
{{include 'footer'}}
</body>
</html>
The HTML for home
page will be rendered as:
<html>
<body>
<p>Demo Page</p>
<footer> Powered by Brick.js </footer>
</body>
</html>
Brick-hbs implemented async helper internaly, to support layout extend. Eg:
File layout1/view.html
in module layout1
:
<html>
<title>Common Title</title>
<body>
{{{block}}}
</body>
</html>
Use
{{block}}
for escaping.
File home/view.hbs
in module home
:
{{extend 'layout1'}}
<p> Contents for home page </p>
The HTML for home
page will be rendered as:
<html>
<title>Common Title</title>
<body>
<p> Contents for home page </p>
</body>
</html>
Type: Bool
Default: false
If set to true
, all templates will be loaded only once (for production usage). Otherwise, template file will be reloaded on every HTTP request.
Above declared Hbs
object is compatible with Handlebars.
Javascript:
Hbs.registerHelper('upperCase', function(content) {
return content.toUpperCase();
});
Template:
Will be rendered as:
<h3>ALICE</h3>