ループ中にローカル変数を保持しておきたいようなケースがあった。JSPのTaglibでいうところの <c:set>のようなものである。
そこで、Helperを作ってみた。
opitonsにはdataオブジェクトが含まれているので、そこにattrというオブジェクトを作り、hashMap的に使う事にする。
Handlebars.registerHelper('set', function (key,val,options) { if (options.data) { if(!options.data.attr){ options.data.attr = {}; } options.data.attr[key] = val; } return null; });
サンプルデータ。
{ name:'Taro Yamada' }
テンプレート。標準の@data変数と同様にして@attrで値が取得でき
他の組み込みヘルパーでも使える。変数の有効範囲はsetを使用したブロックに準ずる。ループ内で定義すればループ内のみ有効となる。
//値をセット {{set 'nameKey' name}} //セットした値の出力 {{@attr.nameKey}}
出力
Taro Yamada
問題はattrという変数が他のヘルパーや将来的に公式な変数として使われると競合することになるので注意が必要。