我可以使用jQuery查看每个完成时间,但我需要所有主干ajax请求的开始和结束。
这样我就可以向用户提出并指示应用程序正在运行。
我可以将每个请求推送并弹出到阵列,但是想知道是否有更简单的方法?
Backbone.ajax = function() {
$A.report('BB - ajax called');
var xhr = Backbone.$.ajax.apply(Backbone.$, arguments);
xhr.always(function(){
$A.report('BB - ajax completed');
});
return xhr;
};
这是一个解决方案:
// Set the default implementation of `Backbone.ajax` to proxy through to `$`.
// Override this if you'd like to use a different library.
var requestArray = [];
Backbone.ajax = function() {
var xhr = Backbone.$.ajax.apply(Backbone.$, arguments);
requestArray.push('mark');
$A.report('BB - Ajax Started');
xhr.always(function(){
requestArray.pop();
$A.report('BB - Ajax Completed');
if(requestArray.length === 0){
$A.report('BB - All Ajax Completed');
}
});
return xhr;
};
答案 0 :(得分:0)
我使用一个依赖于内置事件的Backbones的简单模式。我主要使用它来显示/隐藏加载图标。在下面的示例中,我发出2个请求。在每次请求成功时,我增加一个计数器。如果该计数器达到2,我执行我想要的操作,通常隐藏加载图标并渲染视图。
var exampleView = Backbone.View.extend({
waitToLoad:0,
initialize:function(){
var collection1 = new ExampleCollection();
var collection2 = new ExampleCollection();
this.listenTo(collection1,'sync',this.dataReady);
this.listenTo(collection2,'sync',this.dataReady);
collection1.fetch();
collection2.fetch();
},
dataReady:function(){
this.waitToLoad++;
if(this.waitToLoad == 2){
//all requests done
this.render();
this.waitToLoad = 0;
}
},
render:function(){
}
})