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(); } });