https://github.com/wycats/handlebars.js/#registering-helpers
前の「ヘルパーの登録」セクションでは、単一タグのヘルパーの作成を示しました。
Handlebars.registerHelper('link_to', function(context) {
return "<a href='" + context.url + "'>" + context.body + "</a>";
});
{{#posts}} <li>{{{link_to this}}}</li> {{/posts}}
「context」が渡され、「context.url」、「context.body」などと言ってそのプロパティに簡単にアクセスできることに注意してください。
https://github.com/wycats/handlebars.js/#block-helpers
さて、「ブロック ヘルパー」セクションには、同様の例がありますが、不必要に複雑に思えます。
Handlebars.registerHelper('link', function(context, fn) {
return '<a href="/people/' + this.__get__("id") + '">' + fn(this) + '</a>';
});
{{#people}} <li>{{{#link}}}{{name}}{{/link}}</li> {{/people}}
まず、今回は開始タグで「this」を渡していないので、ヘルパーは「context」パラメータをどのように受け取っているのでしょうか? Handlebars が便宜上それを自動的に渡すのであれば、単一タグ ヘルパーに対してもそれを行わないのはなぜでしょうか? 次に、最初の例では、「{{link_to this}}」の代わりに「{{link_to}}」を使用できます。私は何が欠けていますか?
第 2 に、ブロック ヘルパーが「コンテキスト」パラメーターを受け取る場合、単一タグ ヘルパーと同じ方法でそれを使用できないのはなぜですか? 恐ろしい「this.id」の代わりに「context.id」と言えないのはなぜですか。get ("id")'? 私は何が欠けていますか?
これがドキュメントでニッチを選ぶように見えないことを願っています。比較対照は、物事の本質を本当に理解する方法です。混乱を理解に置き換えるのを手伝ってください。:)