0

jquery deferreds を使用しようとすると、vktemplate の使用がうまく機能しません。vktemplate は独自の ajax 呼び出しを行うため、vktemplate が作業を完了する前に deferred が解決され、オプションのコールバックが行われます。これら2つのことが起こるまで約束が解決されないようにvkを設定するにはどうすればよいですか?

$(document).on('click', '.ajax', function() {
    $.when(ajax1('<p>first</p>'), 
           ajax2('<p>second</p>'), 
           ajax3('<p>third</p>'))
     .then(function(results1, results2, results3) {
        console.log(results1);
        $('.document').append(results1);
        $('.document').append(results2); 
        $('.document').append(results3);         
        alert('all ajax done');
    });
});

function ajax1(data) {

    $.ajax({
        type: 'post',
        url: 'templates/test_template.tmpl',
        data: "data=" + data,
        dataType: 'json',
        success: function (returnedData) {

            $('#resultsDiv').vkTemplate('templates/test_template.tmpl', returnedData, function () {
                //vk callback
                //possibly call my resolve here?
            });
        }
    });
}

function ajax2(data){//more of the same}
4

1 に答える 1

1

vkTemplate は何も返さないため、手動で deferred を作成し、必要なデータを使用して成功のコールバックで解決する必要があります。

function ajax1(data) {
    var dfd = $.Deferred();

    $.ajax({
        type: 'post',
        url: 'templates/test_template.tmpl',
        data: "data=" + data,
        dataType: 'json',
        success: function (returnedData) {

            $('#resultsDiv').vkTemplate('templates/test_template.tmpl', returnedData, function (el, data, context) {
                dfd.resolveWith(context, [$(el)]);
            });
        }
    });

    return dfd.promise();
}
于 2012-11-19T21:49:06.883 に答える