0
for (var i = 0; i < json.length; i++) {
    $.Mustache.load('/mustaches.php', function(i) {
         //Do Something
    });
}

var iこの場合、どのように関数に渡しますか?

編集: 申し訳ありませんが、実際には Mustache.load 呼び出しを何度も行いたくありません。1回だけ。どうやってやるの?

4

2 に答える 2

0

あなたの質問を解決するエレガントな方法は、bindメソッドを使用することです。

for (var i = 0; i < json.length; i++) {
    $.Mustache.load('/mustaches.php', function(i) {
         //Do Something
    }.bind(this, i));
}

このbindメソッドは、新しいコンテキスト (この場合は ) を持つ新しい関数を返し、関数にthis1 つ (または複数) の引数を適用します (iこの場合は)。との詳細についてはbindcurrying こちらを参照してください。

編集。テンプレートを 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,
      ...
    });
  }
});
于 2013-08-16T20:23:32.043 に答える