4

我在 jquery 中发现了一件很酷的事情:你可以这样做:

$.when([$.get(..), $.ajax(...), $.getJSON(...)]).then(function(data1,data2,data3){
         // code to run when all requests are done
        });

当您想要同步许多 ajax 调用时,这非常有用。

在主干中,每次获取模型或集合时都会发出 ajax 调用:

cardsCollection.fetch();

我的问题是如何通过主干模型/集合获取实现类似的同步功能:

我想做类似的事情:

$.when([series.fetch(), cardsCollection.fetch()]).then(function(){
            cardsListView.seriesID = seriesID;
            cardsListView.seriesName = series.get('seriesName');
            cardsListView.template = _.template(CardsListTemplate);
            cardsListView.render();
            $('#loader').hide();
        });

可能吗?

tnx。;-)

4

2 回答 2

6

是的,这是可能的。只需传递几个 Deferred to jQuery.when$.when(series.fetch(), cardsCollection.fetch()).then(...)

于 2012-06-05T14:16:12.913 回答
4

$.when不接受数组,您需要使用.applywith $.when

$.when.apply($,[series.fetch(), cardsCollection.fetch()]).done(dostuff);

但是,series.fetch()并且cardsCollection.fetch()必须返回延迟对象。

如果你不使用.apply,它会立即解决,因为你没有给它一个延迟对象。

于 2012-06-04T15:16:56.023 回答