Próbuję zrozumieć moją koncepcję deferred
i próbuję użyć jej do zsynchronizowania animacji fadeIn
/fadeOut
wraz z wywołaniem Ajax.Używanie jquery odroczonej do synchronizacji animacji i ajaxu
Zasadniczo mam przełączanie treści na stronie idzie:
- Fetch zawartość z ajax
- W odpowiedzi Fadeout
- Wymień zawartość
- FadeIn
Jednakże, jeśli dobrze rozumiem deferred
s prawo Mogę być w stanie zrobić coś takiego:
- Fadeout, a jednocześnie zainicjować Fetch treść z ajax
- Gdy zarówno Fadeout a zawartość Fetch są kompletne: Zmiana zawartości
- FadeIn
Niektóre kodu oryginalnego rozwiązania:
$.get(url, function(page) {
$('#content').fadeTo(100, 0, 'linear', function() {
$(this).html(page.text).fadeTo(400, 1, 'linear');
});
}
staram się zrobić coś takiego:
var deferred1 = $.get(url);
var deferred2 = $('#content').fadeTo(100, 0, 'linear').promise();
$.when(deferred1, deferred2).done(function() {
$('#content').html(page.text).fadeTo(400, 1, 'linear');
});
Po prostu nie wiem, jak go używać. I czy powinienem użyć done, czy potem? Czy powinienem używać rur w sprytny sposób? Czy potrzebuję promise
?
Jaki byłby bardziej "standaryzowany" sposób wdrożenia tego?
czy jesteś pewien, że nie potrzebuje '.promise()' - AIUI Obiekt jQuery nie implementuje automatycznie interfejsu obietnicy, aby wskazać zakończenie animacji, musisz wywołać '$ (...). Obietnica() 'aby uzyskać pożądaną obietnicę. – Alnitak
@Alnitak: Afaik to robi. Chyba że zostało to niedawno zmienione. * edit: * Nadal działa: http://jsfiddle.net/y5Fk7/. –
Nie to, co wiem, tak było, odkąd animacja zaczęła wspierać odroczone w 1.6. Zobacz 'http: // api.jquery.com/obietnica /' vs funkcję 'deferred.promise()'. Wywołanie '.promise' na odroczonym akuratnie gwarantuje, że dostajesz tylko (usunięty) obiekt, który implementuje tylko interfejs obietnicy, ale wywołanie' .promise' na obiekcie jQuery jest konieczne do utworzenia dynamicznej obietnicy, która obejrzy animację tego elementu kolejka. – Alnitak