рд╡рд░реНрддрдорд╛рди рдЙрджреНрдпрдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, jQuery рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕реНрдердЧрд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ - рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓реЗ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╣реБрдИред рдореБрдЭреЗ
$.fn
рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ -
eachDeferred
ред
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ jQuery рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд▓реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ $.Deferred
jQuery рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЬреНрдЮрд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИред (function ($) { $.fn.extend({ eachDeferred: function (c) { var that = this, dfd = $.Deferred(), elms = $.makeArray(that), i = elms.length, next = function () { setTimeout(function () { elms.length ? cb(elms.shift()) : dfd.resolve(that); }, 0); }, cb = function (elm) { $.when(c.call(elm, i - elms.length, $(elm))).done(function (result) { dfd.notify(result); next(); }); }; next(); return dfd.promise(); } }); })(jQuery);
рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ
$.Deferred
рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ
eachDeferred
рдкреНрд▓рдЧрдЗрди рдХреЛрдб
eachDeferred
рднреА
$.Deferred
рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдХрд┐ рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реВрдЪрдирд╛
notify/progress
рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░рд┐рдгрд╛рдо (
arg
, рдЬреЛ
$.Deferred.resolve(arg)
рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИред рд▓реВрдк рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ
$.Deferred.resolve(arg)
) рдХреЛ
.progress(function(arg){})
рдХреЗ рдХреЛрдб рдореЗрдВ
.progress(function(arg){})
(
.progress(function(arg){})
рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реЛ)ред
рдХреЛрдб рд╕реЗ рдПрдХ рдЫреЛрдЯреА рдХреЙрдкреА / рдкреЗрд╕реНрдЯ
that.widgets.eachDeferred(function (i, widget) { return that.renderContent(widget); }).done(dfd.resolve);
renderContent
рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдЦреАрдВрдЪрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдЬреЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдиреЗрддреНрд░рд╣реАрди рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ
$.Deferred
(
$.get().success()
) рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЬреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг
var dfd = $.Deferred(), _r = []; xml.children("Tree").eachDeferred(function (i, xmlNode) { return that._buildTreeContents(xmlNode); }).progress(function (treeContents) { _r.push(treeContents); }).done(function () { dfd.resolve(_r); }); return dfd.promise();
_buildTreeContents
рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдЯреНрд░реА рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ (рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ)ред рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреНрд░реА рд▓реЗрдЖрдЙрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдкреГрд╖реНрда рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рддрдВрддреНрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ (рд╕реНрдерд┐рд░) рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдгредPS рдпрд╣
next()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЕрдЬреАрдм рд╕рдордпрдмрд╛рд╣реНрдп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред JQuery рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЗрд╕рдореЗрдВ
.notify()
рдХреЛ рдЙрд╕реА рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд░реНрддрдорд╛рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡реАрдПрдо рд╕реНрдЯреИрдХ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХреЗред
рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЙрд▓ рдирд┐рдпрдорд┐рдд рд╕реНрдЯреИрдХ рдкрд░ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдЗрд╕реЗ
.notify()
рд╕реЗ
рдкрд╣рд▓реЗ рдХреЙрд▓
рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдЕрдВрдд рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЕрдЧрд▓реЗ рдкрд░ рдЬрд╛рдПрдВред