繰り返し処理してリストのマークアップを作成しようとしているオブジェクトの配列があります。配列を使用して遅延リクエストを格納し、すべてのリクエストが完了した後に連結マークアップをDOMに挿入する場合は$.whenを使用しています。
コードは次のとおりです。
function populateItemList(items) {
var output = '',
item = null,
template = null,
defers = [];
for (var i = 0, j = items.length; i < j; i++) {
item = items[i];
defers.push(function() {
$.get('/item/' + item.id + '/template')
.done(function(source) {
template = Handlebars.compile(source);
output += template(item);
console.log(item.id + ': done');
})
});
}
$.when.apply(window, defers).done(function() {
$('.itemListContainer').html(output);
$('.itemList a').click(onItemLinkClick);
console.log('when: ' + output);
});
}
しかし、私は成功していません。私は2つの問題のうちの1つに遭遇しています:
- (上記のコードのように)遅延アイテムを関数でラップすると、リクエストは実行されませんが、$。whenは実行されます。ただし、リクエストが実行されなかったため、出力は空になります。
- 遅延アイテムを関数でラップしないと、リクエストが実行され(正しい回数ですが、コンソールに記録されるitem.idは常に最後のアイテムのIDです)、$。whenは実行されません。実行されます。
私はこれがこの質問に非常に似ていることを知っており、私はそのコードを私の基礎として使用していますが、私はまだこれらの問題を抱えています。何か案は?