0
我正在使用Backbone.js,並且我有一些事件,這些事件產生Options對象的設置,這些事件發生在我的路由器中。被調用的視圖需要這些對象,因此它們必須在視圖創建之前完成。問題是發生的這些事件是ajax並且是異步的,所以它們在顯示視圖之前不會完成。我試圖讓這些事件同步,但這會導致其他問題,比如凍結gui。所以,我試圖鏈接我的函數,以便在所有函數被調用之前創建視圖。但是,這並不適合我,因爲我似乎無法弄清楚如何在防守呼叫之間傳遞數據。以下是我有:Jquery Promise和與返回結果相關
Router.js:
someParentFunction:function(paramA, paramB){
var that = this;
var defer1 = $.when(
$.get(that.functionA('somedata1','somedata2',that))
);
defer1.done(function() {
var defer2 = $.when(
$.get(that.functionB('someData',that))
);
defer2.done(function (data) {
var defer3 = $.when(
$.get(that.functionC('somedata1',that))
);
defer3.done(function (data) {
//how do I get the results from each Deferred function?
//keeling in mind that each deferred function
//also receives parameters.
//also, the order of the other functions does not matter,
//as long as they all return their values before this
//view is created.
that.view = new ProjectView({
someParam1:paramA,
someParam2:paramB,
resultsA: jQuery.parseJSON(defer1.results),
resultsB: jQuery.parseJSON(defer2.results),
resultsC: jQuery.parseJSON(defer3.results),
}),
window.app.page(that.view, {
tab:'someName',
})
});
});
});
}
functionA: function(param1, param2){
var url = '?q=somestring&' + param1 + '&' + param2 ;
return $.ajax({
url: url,
context: context,
beforeSend: function(xhr) {
);
}
}).success(function(data) {
}).responseText;
},
functionB: function(param1, context){
var url = '?q=somestring&' + param1 ;
return $.ajax({
url: url,
context: context,
beforeSend: function(xhr) {
);
}
}).success(function(data) {
}).responseText;
},
functionC: function(param1, context){
var url = '?q=somestring&' + param1;
return $.ajax({
url: url,
context: context,
beforeSend: function(xhr) {
);
}
}).success(function(data) {
}).responseText;
},
檢查'functionX'函數。它們都有相同的語法錯誤。 – Andreas
不需要在'$ .when'中包裝一個'$ .ajax'。只需添加額外的代碼。 '.ajax'已經返回一個承諾 – charlietfl
上面的代碼只是僞代碼 – jason