如何使用JQuery WHEN和THEN同步两个Backbone fetch调用

时间:2012-06-04 15:09:34

标签: javascript jquery backbone.js

我在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。 ; - )

2 个答案:

答案 0 :(得分:6)

是的,这是可能的。只需将几个延迟传递给jQuery.when$.when(series.fetch(), cardsCollection.fetch()).then(...)

答案 1 :(得分:4)

$.when不接受数组,您需要将.apply$.when一起使用。

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

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

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