嘿大家I我正在尝试在骨干中绘制具有多个模型和相关视图的屏幕。为此,我对服务器进行了严格的ajax调用,以获取此数据的数据。首先我认为解决方案可能是jquery函数$ when(ajaxcall1,ajaxcall2)完成(函数),但....
getFById: function (id, context, success, error) {
this.fetch({
data: {
id: id
}
}).success(function () {
success();
}).error(function () {
error();
});
},
parse: function (response) {
response.pedidosEntrega = new App.PedidosbookingCollection(response.datosPedidosbookingDto);
response.cabeceraBookingDto = response.cabeceraBookingDto;
return response;
}
getFByBooking: function (idBooking, context) {
return $.ajax({
async: true,
context: context,
cache: false,
type: 'GET',
dataType: 'json',
contentType: 'application/json',
data: {
id: idBooking
},
url: this.datosPorFUrl,
});
},
在我的router.js中有调用渲染视图。
$.when(this.model.getFById(idBooking, idFactura, this),
this.collectionF1Candidatas.getFByBooking(idBooking))
.done(_.bind(function (modelBooking, facturasCandidatas) {
this.asociarF1BookingExito(facturasCandidatas);
}, this));
问题是模型1中的函数解析与此多次调用是异步的,并且在句子中不执行$。如何使用parse函数对ajax调用进行sincronyze?
我知道它不是骨干网的最佳解决方案。有人能告诉我一个更好的解决方案吗?在这个技术中实现它?
感谢所有人
答案 0 :(得分:0)
首先,将成功(和错误?)回调传递给getFByBooking
函数,以使接口与模型的getFById
函数对齐。这样,你可以用同样的方式对待它们:
getFByBooking : function(idBooking, context, success /*, error*/) {
$.ajax({
// ...
success: success
});
}
现在,在您的路由器中,您可以将相同的成功回调传递给它们,但不要在第一个响应时调用它。你可以在这里利用下划线/ lodash的_.after
的力量:
var success = _.bind(function (modelBooking, facturasCandidatas) {
this.asociarF1BookingExito(facturasCandidatas);
}, this);
// let's tell it to only be invoked on the second call
success = _.after(success, 2);
this.model.getFById(idBooking, idFactura, success /*, error*/);
this.collectionF1Candidatas.getFByBooking(idBooking, idFactura, success /*, error*/);
我不知道您的客户端是否有ECMA 6,但如果是这样,您也可以使用generators来完成同样的事情,更加优雅。这是一个video,它明确表示日期。