Handlebar.jsを使ったヘルパーの登録

Handlebars.jsのヘルパーを独自に定義することができます。
参考:Handlebars.js

registerHelperを使い、ヘルパーを自作する

Expressionヘルパーと、Blockヘルパーの2種類がある。
Expressionヘルパーはテンプレート中の{{Expression}}を使って呼び出す。
Blockヘルパーはテンプレート中のブロック{{#blockName}}...{{/blockName}}から呼び出す。

Expressionヘルパーをつくってみる。

// ヘルパーの定義
// greatという名前のヘルパーを定義
Handlebars.registerHelper("great", function(fN, lN) {
  return "Hello, " + fN + " " + lN + "!"; 
});

// テンプレートの中の記述
// 引数"firstName"と"lastName"を渡した
{{great "firstName" "lastName"}}

// ブラウザへの出力
Hello, firstName lastName!

Blockヘルパーをつくってみる。

// ヘルパーの定義
Handlebars.registerHelper("modulo", function(n, block){
  if((n % 2) == 0) {
    return block();
  } else {
    return block.inverse();
  }
});

// テンプレートの中の記述
{{#modulo 10}} even {{else}} odd {{/modulo}}
{{#modulo 3 }} even {{else}} odd {{/modulo}}

// ブラウザへの出力
even odd

ここでblock(block, block.inverse())という引数、関数の用途がわかりづらい。
最初の引数のblockはこのヘルパーがBlockヘルパーであることの意味。
ソースコードをチェックしていないので憶測ですが、テンプレート中のブロックオブジェクトを指すと考えていいかと)
戻り値としての、block()はテンプレート中のブロックの{{else}}より前、
block.inverse()は{{else}}より後を意味する。
上述のコードは次のように書き換えることができる。

Handlebars.registerHelper("modulo", function(n, trueBlock, falseBlock){
  if((n % 2) == 0) {
    return trueBlock();
  } else {
    return falseBlock();
  }
});