Я использую Backbone.js, и у меня есть ряд событий, которые создают настройки для объекта Options, которые происходят в моем маршрутизаторе. Представление, которое вызывается, нуждается в этих объектах, поэтому они должны быть завершены до создания представления. Проблема в том, что эти происходящие события являются ajax и асинхронными, поэтому они не завершаются до отображения представления. Я попытался сделать события синхронными, но это вызывает другие проблемы, такие как зависание графического интерфейса. Итак, я пытаюсь связать свои функции, чтобы представление создавалось до тех пор, пока не будут вызваны все функции. Но это не работает для меня, так как я не могу понять, как передавать данные между отложенными вызовами. Вот что у меня есть:
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
. Все они имеют одну и ту же синтаксическую ошибку. - person Andreas   schedule 23.01.2016$.ajax
в$.when
. Просто добавьте дополнительный код.$.ajax
уже возвращает обещание - person charlietfl   schedule 23.01.2016