Page 83 - jQuery для начинающих
P. 83
Становится ли от этого код читаемым – сомневаюсь, но метод есть, и может пригодится.
Ещё упомяну метод always() – он добавляет обработчики, которые будут выполнены вне
зависимости от выбранного сценария. Чтобы не путаться в перечисленных методах приведу
блок-схему:
$.Deferred(…)
then done(…) fail(…)
1
1 done(…)
2
3 always(…) 2
resolve() reject()
В качестве аргументов методов done() и fail() может быть произвольное множество
callback-функций. При вызове resolve() и reject() можно передать произвольные
данные в зарегистрированные callback-функции для дальнейшей работы. Кроме того,
существуют еще методы resolveWith() и rejectWith(), они позволяют изменять контекст
вызываемых callback-функции (т.е. внутри них this будет смотреть на указанный контекст)
Отдельно хотел отметить, что если вы собираетесь передать Deferred объект «на сторону»,
чтобы «там» могли повесить свои обработчики событий, но не хотите потерять контроль, то
возвращайте не сам объект, а результат выполнения метода promise() – это фактически
будет искомый объект в режиме «read only».
Теперь покажу хитрый метод $.when():
$.when(
$.ajax("/ajax/example.json"),
$("article").slideUp(200)
).then(function(){
alert("All done");
}, function(){
alert("Something wrong");
})
83
www.trk.kg