for (var i = 0; i < json.length; i++) {
$.Mustache.load('/mustaches.php', function(i) {
//Do Something
});
}
var i
この場合、どのように関数に渡しますか?
編集: 申し訳ありませんが、実際には Mustache.load 呼び出しを何度も行いたくありません。1回だけ。どうやってやるの?
for (var i = 0; i < json.length; i++) {
$.Mustache.load('/mustaches.php', function(i) {
//Do Something
});
}
var i
この場合、どのように関数に渡しますか?
編集: 申し訳ありませんが、実際には Mustache.load 呼び出しを何度も行いたくありません。1回だけ。どうやってやるの?
あなたの質問を解決するエレガントな方法は、bind
メソッドを使用することです。
for (var i = 0; i < json.length; i++) {
$.Mustache.load('/mustaches.php', function(i) {
//Do Something
}.bind(this, i));
}
このbind
メソッドは、新しいコンテキスト (この場合は ) を持つ新しい関数を返し、関数にthis
1 つ (または複数) の引数を適用します (i
この場合は)。との詳細についてはbind
、currying
こちらを参照してください。
編集。テンプレートを 1 回だけロードすることで、ループを最適化できます。実際、ループの各サイクルで$.Mustache.load
フェッチします。/mustache.php
また、関数は AJAX を使用してテンプレートを非同期的にフェッチするため、テンプレート内の順序が一貫していない可能性があります (1 つの応答が他の応答よりも長くかかる場合があります)。修正は非常に簡単です。テンプレートをロードしてから、ループを反復処理します。
$.get('/mustache.php').done(function(template){
$.Mustache.add('my-template', template);
for (var i = 0, len = json.length; i < len; ++i) {
var rendered_template = $.Mustache.render('my-template', {
i: i,
...
});
}
});