私は Handlebars.js が初めてで、使い始めたばかりです。ほとんどの例は、オブジェクトの反復処理に基づいています。基本的な for ループでハンドルバーを使用する方法を知りたかった。
例。
for(i=0 ; i<100 ; i++) {
create li's with i as the value
}
これはどのように達成できますか?
私は Handlebars.js が初めてで、使い始めたばかりです。ほとんどの例は、オブジェクトの反復処理に基づいています。基本的な for ループでハンドルバーを使用する方法を知りたかった。
例。
for(i=0 ; i<100 ; i++) {
create li's with i as the value
}
これはどのように達成できますか?
このためのハンドルバーには何もありませんが、独自のヘルパーを簡単に追加できます。
何かをしたいだけの場合は、次のようにしますn
。
Handlebars.registerHelper('times', function(n, block) {
var accum = '';
for(var i = 0; i < n; ++i)
accum += block.fn(i);
return accum;
});
と
{{#times 10}}
<span>{{this}}</span>
{{/times}}
for(;;)
ループ全体が必要な場合は、次のようになります。
Handlebars.registerHelper('for', function(from, to, incr, block) {
var accum = '';
for(var i = from; i < to; i += incr)
accum += block.fn(i);
return accum;
});
と
{{#for 0 10 2}}
<span>{{this}}</span>
{{/for}}
last / first / index を使用したい場合は、次を使用できますが、ここでの一番の答えは良いです
Handlebars.registerHelper('times', function(n, block) {
var accum = '';
for(var i = 0; i < n; ++i) {
block.data.index = i;
block.data.first = i === 0;
block.data.last = i === (n - 1);
accum += block.fn(this);
}
return accum;
});
と
{{#times 10}}
<span> {{@first}} {{@index}} {{@last}}</span>
{{/times}}
n
このスニペットは、動的な値として来る場合に else ブロックを処理し、@index
オプションのコンテキスト変数を提供します。実行の外部コンテキストも保持します。
/*
* Repeat given markup with given times
* provides @index for the repeated iteraction
*/
Handlebars.registerHelper("repeat", function (times, opts) {
var out = "";
var i;
var data = {};
if ( times ) {
for ( i = 0; i < times; i += 1 ) {
data.index = i;
out += opts.fn(this, {
data: data
});
}
} else {
out = opts.inverse(this);
}
return out;
});