Я просто пытаюсь демистифицировать, как метод $.Deferred
работает в jQuery. Я знаю, что он в основном используется для AJAX, но я также хотел бы использовать этот метод для вещей, отличных от AJAX. Я читал the jQuery documentation по этому методу и наткнулся на следующий фрагмент кода:
$.fn.bindOnce = function(event, callback) {
var element = $(this[ 0 ]),
defer = element.data("bind_once_defer_" + event);
if (!defer) {
defer = $.Deferred();
function deferCallback() {
element.unbind(event, deferCallback);
defer.resolveWith(this, arguments);
}
element.bind(event, deferCallback)
element.data("bind_once_defer_" + event , defer);
}
return defer.done(callback).promise();
// what is this piece of code really doing and why is it necessary ?
};
... Теперь, если вы идете через код построчно его довольно легко под что происходит.
Документация JQuery говорит нам, Что линия происходит по линии, например, так:
- Проверьте, если элемент уже отложенное прилагается к данному событию
- если нет, то создать его и сделать его поэтому он разрешается, когда событие запускается в первый раз около
- затем присоединяет данный обратный вызов к отложенному и возвращает обещание.
трудности у меня есть и линия, однако, что я не могу понять, ниже:
return defer.done(callback).promise();
Я не понимаю, цель этой строки кода и почему это полезно и что именно это метод обещаний, выполняемый в этом сценарии?
Может ли кто-нибудь объяснить?
Не могли бы вы принять к сведению [усовершенствования форматирования, сделанные для вашего сообщения] (http://stackoverflow.com/posts/31263269/revisions), и применять их в будущем? Ваши вопросы имеют историю изначально плохо отформатированы и должны быть отредактированы/улучшены редакторами. – Matt
@Matt Конечно, отметьте это! :) благодаря –