フック
Handlebarsの関数呼び出しにフックできる場所がいくつかあります。
helperMissing
このフックは、マスタッシュまたはブロックステートメントが
- 登録済みヘルパーではなく、かつ
- 現在の評価コンテキストのプロパティでもない場合に呼び出されます。
ヘルパー `helperMissing` を登録することで、これらの状況にカスタム処理を追加できます。
テンプレート {{foo}}
{{foo true}}
{{foo 2 true}}
{{#foo true}}{{/foo}}
{{#foo}}{{/foo}}
準備スクリプト Handlebars.registerHelper('helperMissing', function( ) {
var options = arguments[arguments.length-1];
var args = Array.prototype.slice.call(arguments, 0,arguments.length-1)
return new Handlebars.SafeString("Missing: "+options.name+"("+args+")")
})
出力 Missing: foo()
Missing: foo(true)
Missing: foo(2,true)
Missing: foo(true)
ヘルパーは、カスタムヘルパーまたはブロックヘルパーと同じ引数とオプション(`hash`、`name` など)を受け取ります。 `options.name` は、呼び出されているヘルパーの名前です。
デフォルトの動作
マスタッシュにパラメータが渡されない場合、デフォルトの動作では何もせず、マスタッシュ式全体またはブロック全体を無視します。
テンプレート some_{{foo}}mustache
some_{{#foo}}abc{{/foo}}block
マスタッシュにパラメータが渡された場合、Handlebarsは例外をスローします。
テンプレート {{foo bar}}
{{#foo bar}}abc{{/foo}}
blockHelperMissing
このフックは、
- ブロック式が登録されていないヘルパーを呼び出し、
- しかし、名前が現在の評価コンテキストのプロパティと一致する場合に呼び出されます。
`blockHelperMissing` という名前のヘルパーを登録することで、この状況を処理できます。
テンプレート (プレイグラウンドで表示)
{{#person}}
{{firstname}} {{lastname}}
{{/person}}
準備スクリプト ... (SVG アイコンと同じ) ... (プレイグラウンドで表示)
Handlebars.registerHelper('blockHelperMissing', function(context, options) {
return "Helper '"+options.name+"' not found. "
+ "Printing block: " + options.fn(context);
});
デフォルトの動作
フックは、現在のコンテキストで解決されたプロパティ値と、プロパティの名前に設定された `options.name` フィールドを使用して呼び出されます。
フックがオーバーライドされていない場合、デフォルトの実装は Mustache の動作を模倣し、単にブロックを呼び出します。