2013-03-04 5 views
0

이 함수는 close()가 끝날 때 init() 함수를 실행한다고 말하고 싶습니다. 그러나 그것은 나를 위해 일하지 않습니다.

$.when(close(toolTip)).done(init(toolTip, anchor)); 

난 그냥 초기화를 (호출하기 전에) 완료) (확인 가깝게 만들려고 노력, 아약스와 관련된 아무것도에 대한 $ .when를 사용하지하고, 더 나는 마지막에 초기화()를 부착 할 수 닫기() 중. 어떤 아이디어? 여기에 확인

은 close()를 가까이()는 초기화를 호출 할 수 있습니다

var close = function (toolTip) { 
    toolTip.fadeOut('fast', function (e) { 
     if (typeof e !== 'undefined') { 
      //Re-set values applied when initted 
      var toolTipBd = toolTip.find('.bd:first'); 
      toolTip.css('width', ''); 
      toolTipBd.css('max-height', ''); 
      toolTip.css('max-height', ''); 
      toolTipBd.css('overflowY', ''); 
     } 
    }); 
}; 

없음 ().

+0

해당 단축 할 수 닫기를 (도움말) 수행 일부 비동기 함수? 그렇다면 해당 함수에 콜백이 있습니까? –

+3

우리는'close()'가하고있는 일을보고,'$ .when'에서 사용할 약속이나 지연 객체를 반환해야하며'init()'에 대한 호출은 함수를 반환하지 않는 한 잘못입니다. –

답변

1

귀하의 close() 구현은 다음과 같이해야합니다 : Deferred's

var close = function (toolTip) { 
    var d = $.Deferred(); 

    toolTip.fadeOut('fast', function (e) { 
     if (typeof e !== 'undefined') { 
      //Re-set values applied when initted 
      var toolTipBd = toolTip.find('.bd:first'); 
      toolTip.css('width', ''); 
      toolTipBd.css('max-height', ''); 
      toolTip.css('max-height', ''); 
      toolTipBd.css('overflowY', ''); 
     } 

     d.resolve(); 
    }); 

    return d.promise(); 
}; 
1

$.when 작품. 새 Deferred을 반환하며 Deferred 명이 제공 한 문제가 해결되면 해결됩니다. close()으로

은 바로합니다 ( docs for when() 당 해결하는 약속, when을 반환하지 않는 것. close() 동기 경우

그러나 전혀 when() 필요하지 않습니다.이 인 경우 애니메이션이든이 완료되면 비동기, 당신은 Promise을 반환하고이를 해결해야;

function close(what) { 
    var promise = jQuery.Deferred(); 

    what.fadeOut('slow', function() { 
     promise.resolve(); 
    }); 

    return promise.promise(); 
} 

을 ...하지만 당신은 여전히에 $.when 필요하지 않습니다 안녕 약속이 관련되어 있습니다. $.when은 여러 약속이 실행 중일 때만 유용합니다.

close(toolTip).done(function() { 
    init(toolTip, anchor); 
}); 

참고 또한 done(init(tooltip, anchor)) 즉시 init를 호출하고, 결과 done() 해당 함수 호출 합격; 대신 함수을 전달해야합니다. init에는 매개 변수가 필요하므로 익명의 기능을 도입하여이 문제를 해결했습니다. 이상한 결과 경우가 발생할 수 있습니다 지연된 객체를 해결하기 위해 콜백을 사용하여

return toolTip.fadeOut(... 

:

close(toolTip).done(init); 
1

단순히 반환 도움말 : init이 매개 변수가 필요하지 않은 경우, 그것은 간단로 있었다 것 어떤 이유로 든 하나 이상의 요소가 선택되었습니다.

jQuery 객체는 .promise 메서드를 가지고 있기 때문에 호출됩니다.이 메서드는 모든 활성 애니메이션이 완료 될 때 해결되는 promise 객체를 반환합니다. $.when은 모두 인수가 전달 된 .promise입니다.

또한 예를 들어, 다른 초기화를 호출해야합니다

,

$.when(close(toolTip)).done(function(){ 
    init(toolTip, anchor); 
}); 

그리고, 다른 사람에 의해 지적, 당신은 다음

close(toolTip).promise().done(function(){ 
    init(toolTip, anchor); 
}); 
관련 문제