0

我目前有一个看起来像这样的函数:


$(function(){
 $('.chained_to_vehicle_make_selector').remoteChainedTo('.chained_parent_vehicle_make_selector', '/models.json');
 $('.chained_to_vehicle_model_selector').remoteChainedTo('.chained_parent_vehicle_model_selector', '/trims.json');
 $('.chained_to_vehicle_trim_selector').remoteChainedTo('.chained_parent_vehicle_trim_selector', '/model_years.json');
});

正如您可能知道的那样,每个 remoteChainedTo 函数都在进行 AJAX 调用,这工作正常,但需要一些时间。

然后我有第二个代码块:


$(function() {
    $(".chzn-select").chosen();
    $(".chained_parent_vehicle_make_selector").chosen().change( function() {$(".chained_to_vehicle_make_selector").trigger("liszt:updated"); });
    $(".chained_parent_vehicle_model_selector").chosen().change( function() {$(".chained_to_vehicle_model_selector").trigger("liszt:updated"); });
    $(".chained_parent_vehicle_trim_selector").chosen().change( function() {$(".chained_to_vehicle_trim_selector").trigger("liszt:updated"); });
    $(".chained_child").chosen();
});

这部分代码只要在第一部分完成后触发就可以正常工作。然而,由于 AJAX 调用,它当前在上一节之前触发。

如何实现一个结构,以便在第一个代码块完全完成后总是触发第二个代码块?remoteChainedTo 函数没有定义的回调(我可以看到),并且在任何情况下都不可能知道三个调用中的哪一个将最后完成,因此希望以某种方式将回调放在块上,以便第二个代码部分仅在最后一次 AJAX 调用完成后触发。

编辑:经过更多重构,我的代码现在如下所示:


function makeChains(){
 $('.chained_to_vehicle_make_selector').remoteChainedTo('.chained_parent_vehicle_make_selector', '/models.json');
 $('.chained_to_vehicle_model_selector').remoteChainedTo('.chained_parent_vehicle_model_selector', '/trims.json');
 $('.chained_to_vehicle_trim_selector').remoteChainedTo('.chained_parent_vehicle_trim_selector', '/model_years.json');
}

var chainCall = $(function() {
    makeChains();
});

chainCall.done(function() { 
        $(".chzn-select").chosen();
        $(".chained_parent_vehicle_make_selector").chosen().change( function() {$(".chained_to_vehicle_make_selector").trigger("liszt:updated"); });
        $(".chained_parent_vehicle_model_selector").chosen().change( function() {$(".chained_to_vehicle_model_selector").trigger("liszt:updated"); });
        $(".chained_parent_vehicle_trim_selector").chosen().change( function() {$(".chained_to_vehicle_trim_selector").trigger("liszt:updated"); });
        $(".chained_child").chosen();
    });

但我仍然收到错误消息Object [object Object] has no method 'done'。任何提示表示赞赏。

4

0 回答 0