2012-11-19 5 views
0

vktemplate을 사용하면 jquery 지연을 사용하려고 할 때 작동하지 않습니다. vktemplate이 자체적으로 ajax 호출을하기 때문에, vktemplate이 작업을 완료하기 전에 지연이 해결되고 선택적 콜백이 수행됩니다. 이 두 가지 일이 일어날 때까지 약속이 해결되지 않도록 어떻게 vk를 설정할 수 있습니까?jquery를 vktemplate/queuing ajax 요청과 함께 사용하는 방법

$(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} 

답변

1

vkTemplate은 아무 것도 반환하지 않으므로 지연된 데이터를 수동으로 만들고 필요한 데이터로 성공 콜백에서 해결해야합니다.

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(); 
} 
+0

와우. 괜찮아. 'resolveWith (context, [$ (el)]);는 무엇을합니까? – 1252748

+0

지연된 컨텍스트 및 인수를 확인합니다. http://api.jquery.com/deferred.resolveWith/ –

+0

완벽하게 작동합니다. 당신의 도움을 주셔서 대단히 감사합니다. – 1252748

관련 문제