$ .Deferred рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреБрди: рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдмрдЪрд╛рдПрдВ

рдЫрд╡рд┐
рдореИрдВ рд╣рдмреНрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗрд╡рд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рдФрд░ рдЙрдирд╕реЗ рдЬреБрдбрд╝реЗ рдиреЛрдЯреНрд╕ рдереЗред рдФрд░ рдЬрдм рдореИрдВ рдкреНрд░рд╢реНрди рдХреЛ рдмрдЪрд╛ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╕рднреА рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЛ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬреЛ рдХрд┐ jQuery $ редDeferred insanely рдиреЗ рдореЗрд░реА рдорджрдж рдХреА, рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдиреЛрдЯреЛрдВ рдХреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рджрд╛рдИрдВ рдУрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдПрдХ рдбрд┐рдЬрд╛рдЗрдирд░ рдирд╣реАрдВ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рдХреНрд░рдо рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдХреНрдпрд╛ рдереАрдВред

рд╕рд╡рд╛рд▓ рд╣реИрдВ, рдЙрдирдХреЗ рдЕрдВрджрд░ рдиреЛрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рд╕рдВрдкрд╛рджрди рдпрд╛ рд╕рд╣реЗрдЬрдиреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╢реНрди / рдиреЛрдЯ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рд╕рд░реНрд╡рд░ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╢реНрди рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдиреЛрдЯреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЦреЛрдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдкреНрд░рд╢реНрди рдФрд░ рд╕рдВрд▓рдЧреНрди рдиреЛрдЯ рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рднреЗрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрд▓рдЧ рд╣реЛрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрдЧрд░ рдХреБрдЫ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдмрдЪрд╛рдирд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдЯрд╛рд▓рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рдЖрдпрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрднреА-рдХрднреА рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдореЗрд░реЗ рдЫреЛрдЯреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рднреА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдзреАрд░ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦ рдХреЗ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ рдПрдХ рдбреЗрдореЛ рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВред

рдкрд╣рд▓рд╛ рд╕рд╡рд╛рд▓, рдиреЛрд╕реНрдЯрд┐рдВрдЧред



рд▓реЗрдЖрдЙрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
<ul class="questions"> <li> <div class="question" id="id1"> <span class="text"> ,  </span> <span class="edit">edit</span> </div> </li> </ul> 


рдЬрдм рдЖрдк "рд╕рдВрдкрд╛рджрди" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рдкреНрд░рд╢реНрди рдЖрдИрдбреА рдХреЛ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рд╕рдВрдкрд╛рджрди рдореЛрдб" рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

рд╕рдВрдкрд╛рджрди рдореЛрдб рдореЗрдВ рд▓реЗрдЖрдЙрдЯ:
 <ul class="questions"> <li> <div class="question" id="id1"> <input type="text" name="title" value=" ,  "> <span class="save">save</span> </div> </li> </ul> 


рд╣рдо рдкрд╛рда рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, "рд╕рд╣реЗрдЬреЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рдкреНрд░рд╢реНрди рдХреА рдЖрдИрдбреА, рдмрджрд▓реЗ рд╣реБрдП рдкрд╛рда рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рд▓реЗрдЖрдЙрдЯ "рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб" (рдкреЗрдиреЙрд▓реНрдЯреА рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ) рдорд┐рд▓рддрд╛ рд╣реИред

рдЕрдкрдиреЗ рд╕рд░рд▓рддрдо рд░реВрдк рдореЗрдВ, рдкреНрд░рд╢реНрди рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рддрд░реНрдХ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:
 $('.questions').on('click', '.save', function() { var $li = $(this).closest('li'); saveData($li); }); function saveData($li) { var $item = $li.children('.question'), id = $item.id, $input = $item.children('input'); $.ajax({ type: 'POST', url: '/save', dataType: 'json', data: $input.serialize(), success: function(response) { if ( ! response.errors) { $li.replaceWith(response.data); } } }); } 


рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рди рд╣реИ, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рдкреВрд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рд▓реЗрдЖрдЙрдЯ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрддрд╛ рд╣реИред

рджреВрд╕рд░рд╛ рдкреНрд░рд╢реНрди рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХрд╛ рдШреЛрдВрд╕рд▓рд╛ рд╣реИред



рд▓реЗрдЖрдЙрдЯ:
 <ul class="questions"> <li> <div class="question" id="id2"> <span class="text">   </span> <span class="edit">edit</span> </div> <ul> <li> <div class="note" id="id1"> <span class="text">1 </span> <span class="edit">edit</span> </div> </li> <li> <div class="note" id="id2"> <span class="text">2 </span> <span class="edit">edit</span> </div> </li> </ul> </li> </ul> 


рдпрд╣рд╛рдВ рдпрд╣ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдкреНрд░рд╢реНрди рдХреЛ рд╕рд╣реЗрдЬрддреЗ / рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рд╢реНрди рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдиреЛрдЯреЛрдВред рдпрджрд┐ рдкреНрд░рд╢реНрди рд╕рд╣реЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рдереЗ рддреЛ рдХреНрдпрд╛ рдиреЛрдЯ рднреА рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдЧрдП рдереЗ?
рдпрд╣реА рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ

рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЛрдЯ рдкрд░ "рд╕реЗрд╡" рдкрд░ рдХреНрд▓рд┐рдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддреБрд░рдВрдд "рд╕реЗрд╡" рд╕рд╡рд╛рд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ - рдиреЛрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ, рддреЛ рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░рд╢реНрди рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдиреЛрдЯ рдЦреБрд▓реЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реЗрдЬреЗрдВ, рдФрд░ рдлрд┐рд░ рдкреНрд░рд╢реНрди рдХреЛ рд╕рд╣реЗрдЬреЗрдВред рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрд╕ рдХреНрд╖рдг рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рд╕рднреА рд╕рдВрд▓рдЧреНрди рдиреЛрдЯ рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рд╣реИ рдХрд┐ $ .Deferred рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдкрд╣рд▓реЗ, рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж, рдлрд┐рд░ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВред
рдЬрдм рдЖрдк рдкреНрд░рд╢реНрди рдХреЛ "рд╕реЗрд╡" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ - $ .ajax рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдЯреИрдЪрдореЗрдВрдЯ рдЦреБрд▓рд╛ рд╣реИ, рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╣реИ - рд╣рдо рдкреНрд░рд╢реНрди рдХреЛ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВ, $ .Deferred рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рд╕рднреА рдШреЛрдВрд╕рд▓реЛрдВ рдХреА рдмрдЪрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ - рд╣рдо рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╢реНрди рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдХреЛрдб рджреЗрдЦреЗрдВ:
 $('.question').on('click', '.save', function() { saveData.call(this); }); function saveData() { // this     (   ,   ) var self = this, //     / $button = $(this), $item = $button.closest('div'), $li = $item.closest('li'), //        id = $item.attr('id').replace(/[^0-9.]/g, ""), inputs = $item.find(':input'), type = $item.attr('class'); //       (  ) return $.Deferred(function() { var def = this; $.ajax({ type: 'POST', url: '/save', dataType: 'json', data: inputs.serialize() + '&id=' + id + '&type=' + type, beforeSend: function(xhr){ //      ,       .ignore // .ignore      ,        // (              //     ) var $inner_notes = $li.find('ul .save').not('.ignore'); //    .. if($inner_notes.length) { //         var deferreds = []; $inner_notes.each(function() { //    ,         //  this  .save   deferreds.push(saveData.call(this)); }); //       $.when.apply(null, deferreds).always(function() { //      -    . // self         .save   saveData.call(self); }); //    xhr.abort(); } }, success: function(response){ if ( ! response.errors) { //    ,   $li.replaceWith(response.data); } else { //    ,       $button.addClass('ignore'); } }, error: function() { //    ,       $button.addClass('ignore'); } }).complete(function() { //       -    resolve() def.resolve(); }); }); } 


рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл" рдХрд╛ рдПрдХ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ? рдХреНрд╖рдг тАЭ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдорди рдореЗрдВ рдХреНрдпрд╛ рдерд╛ред

  1. SaveData рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдХреНрдпрд╛ рд╣реИ?
    рдЙрддреНрддрд░ рд╣реИ:
    рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕рд╣реЗрдЬреЗ рдЧрдП рдкреНрд░рд╢реНрди / рдиреЛрдЯ рдХреЗ рд╕реЗрд╡ рддрддреНрд╡ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред
    рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рддрддреНрд╡реЛрдВ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ред
     //   saveData: function() { var self = this, $button = $(this), $item = $button.closest('div'), $li = $item.closest('li'); } //      $('.question').on('click', '.save', function() { saveData.call(this); }); //   var $inner_notes = $li.find('ul .save').not('.ignore'); $inner_notes .each(function() { deferreds.push(saveData.call(this)); }); //   saveData: function() { var self = this; .... $.when.apply(null, deferreds).always(function() { saveData.call(self); }); } 


  2. рд╣рдо рд╕рднреА рдШреЛрдВрд╕рд▓реЗ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЛ рдХреИрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ?
    рдЙрддреНрддрд░ рд╣реИ:
    рдЯрд╛рд▓рдордЯреЛрд▓ рдХреА рдорджрдж рд╕реЗред
     var deferreds = []; $children_notes.each(function() { deferreds.push(app.saveData.call(this)); }); $.when.apply(null, deferreds).always(function() { saveData.call(self); }); 

    • рд╣рдо рдПрдХ рдРрд░реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рд╕реЗрд╡ рдлрдВрдХреНрд╢рди (рдЙрд╕реА рдлрдВрдХреНрд╢рди) рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдбрд┐рдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рдиреЛрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред
    • $ .when (func1, func2) .done (func3)
      рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдмреЛрд▓рддрд╛ рд╣реИ, рдЬрдм func1 рдФрд░ func2 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ func3 рдЪрд▓рд╛рдПрдВред
      рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ .apply () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
    • рдпрд╣рд╛рдВ рдЖрд╕реНрдердЧрд┐рдд рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣рдо рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЧрдП рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рдереЗред
      рдкреНрд░рддреНрдпреЗрдХ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝рдВрдХреНрд╢рди .resolve () рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕рдорд╛рдкрди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ
       saveData: function() { ... return $.Deferred(function() { var def = this; ... $.ajax({...}).complete(function() { def.resolve(); }); } } 

    • рдЬреИрд╕реЗ рд╣реА рдЙрди рд╕рднреА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, func3 рдХреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ .always (рдлрд╝рдВрдХреНрд╢рди () {saveData.call (рд╕реНрд╡рдпрдВ);}) рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдВ рдкреНрд░рд╢реНрди рдХреЗ рдЖрддреНрдо рддрддреНрд╡ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред


  3. $ рд╡рд╛рдкрд╕ рдХреНрдпреЛрдВ рдХрд░реЗрдВред рдкрд╕рдВрджреАрджрд╛ (рдлрд╝рдВрдХреНрд╢рди () {}); ?
    рдЙрддреНрддрд░ рд╣реИ:
    рдЖрд╕реНрдердЧрд┐рдд рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ), рддреЛ рдЖрд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рдЖрдЧреЗ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЯреВрдЯ рдЬрд╛рдПрдЧреА рдФрд░ рд╢реЗрд╖ рд╕рднреА рдХрд╛рд░реНрдп / рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЕрдЬрд╛рдХреНрд╕ рдХрд╛ рдЕрдкрдирд╛ рдЖрд╕реНрдердЧрд┐рдд рдмрд┐рд▓реНрдЯ-рдЗрди рд╣реИ рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡рд░рдг рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдЕрдиреБрд░реЛрдз рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рдлрд▓ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рддреЗ рд╣реИрдВред
     return $.Deferred(function() { var def = this; $.ajax({...}).complete(function() { def.resolve(); }); }); 


  4. рдмрд┐рд▓рдХреБрд▓ $ рдХреНрдпреЛрдВ рд▓реМрдЯрд╛рдПрдБред рдкрд╕рдВрджреАрджрд╛ (рдлрд╝рдВрдХреНрд╢рди () {}); ?
    рдЙрддреНрддрд░ рд╣реИ:
    $ред рдкрд╕рдВрджреАрджрд╛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ...
     //    function someFunc(){ //  var def = $.Deferred(); setTimeout(function(){ //    def.resolve(); }, 1000); //  return def.promise(); } function someFunc(){ //    return $.Deferred(function() { var def = this; setTimeout(function(){ //    def.resolve(); }, 1000); })/* .promise() */; //    ,    .promise() , deferred    . } //someFunc.done(function() {}); 

    ... рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВрдиреЗ рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛, рддреЛ рдЕрдЬрд╛рдХреНрд╕ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

  5. .Ignore рд╡рд░реНрдЧ рдХреНрдпреЛрдВ?
    рдЙрддреНрддрд░ рд╣реИ:
    рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрддреНрддрд░ рд╣реИ: рд╢рд╛рд╢реНрд╡рдд рдЪрдХреНрд░ рдореЗрдВ рдирд╣реАрдВ рдкрдбрд╝рдирд╛ред
    рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЙрддреНрддрд░: рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдмрддрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИред
    рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрдкрд╛рджрди рдФрд░ 2 рдЖрдВрддрд░рд┐рдХ рдиреЛрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди рд╣реИ, рдкреНрд░рд╢реНрди рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
    1. рдкреНрд░рд╢реНрди рдкрд░ .save рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж - рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рдиреЛрдЯреНрд╕ рдХреЗ рд▓рд┐рдП .save рджреЗрдЦреЗрдВред рдкрд╛рдпрд╛ 2, рд╕рд╡рд╛рд▓ рдмрдЪрд╛рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
       beforeSend: function(xhr){ xhr.abort(); } 

    2. рдкрд╣рд▓реЗ рдиреЛрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛, рдЗрд╕рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ред
    3. рджреВрд╕рд░реЗ рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╣реБрдИ, рд▓реЗрдЖрдЙрдЯ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛, .save рдмрдЯрди рдмрдирд╛ рд░рд╣рд╛ред
    4. рдЪреВрдВрдХрд┐ рд╕рд░рдгреА рдореЗрдВ рдЕрдзрд┐рдХ рдиреЛрдЯ рдирд╣реАрдВ рдмрдЪреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╢реНрди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
       $.when.apply(null, deferreds).always(function() { saveData.call(self); }); 

    5. рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдлрд┐рд░ рд╕реЗ рднреЗрдЬ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рдирд╛ рд╕рд╣реЗрдЬреЗ рд╣реБрдП рдШреЛрдВрд╕рд▓реЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ
       var $inner_notes = $li.find('ul .save')/*.not('.ignore')*/; //  .not()  if($inner_notes.length) {} 

    6. рдЪреВрдВрдХрд┐ рдиреЛрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рджреЛ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрддрд╛ рд╣реИред
      • рдпрд╛ рджреВрд╕рд░реА рдмрд╛рд░, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдиреЛрдЯ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкреНрд░рд╢реНрди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
      • рдпрд╛ рдлрд┐рд░ рд╕реЗ рдЕрд╕рдлрд▓рддрд╛ рдФрд░ рд╣рдо рдПрдХ рдЕрдВрддрд╣реАрди рдЪрдХреНрд░ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

      .Ignore class рдХреА рдмрджреМрд▓рдд рд╣рдо рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдЕрдкрдиреА рд░рдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
      рдиреЛрдЯ рд╕рд╣реЗрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓? рдЦреИрд░, рд╕реАрдИ рд▓рд╛ рд╡реА, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╕рд╡рд╛рд▓ рдмрдЪрд╛рдирд╛ рд╣реИред




рддреАрд╕рд░рд╛ рд╕рд╡рд╛рд▓ рдорд▓реНрдЯреА рд▓реЗрд╡рд▓ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╣реИред



рд▓реЗрдЖрдЙрдЯ:
 <ul class="questions"> <li> <div class="question" id="id3"> <span class="text"> c  </span> <span class="edit">edit</span> </div> <ul> <li> <div class="note" id="id1"> <span class="text">1 </span> <span class="edit">edit</span> </div> </li> <li> <div class="note" id="id2"> <span class="text">2 </span> <span class="edit">edit</span> </div> <ul> <li> <div class="note" id="id4"> <span class="text">4 </span> <span class="edit">edit</span> </div> <ul> <li> <div class="note" id="id7"> <span class="text">7 </span> <span class="edit">edit</span> </div> </li> <li> <div class="note" id="id8"> <span class="text">8 </span> <span class="edit">edit</span> </div> </li> </ul> </li> <li> <div class="note" id="id5"> <span class="text">5 </span> <span class="edit">edit</span> </div> <ul> <li> <div class="note" id="id6"> <span class="text">6 </span> <span class="edit">edit</span> </div> </li> </ul> </li> </ul> </li> <li> <div class="note" id="id3"> <span class="text">3 </span> <span class="edit">edit</span> </div> </li> </ul> </li> </ul> 


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдб рдХрд╛рдлреА рдбрд░рд╛рд╡рдирд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд┐рдЫрд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ ..
 var $inner_notes = $li.find('ul .save').not('.ignore') 

... рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ рдиреЛрдЯ рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрджрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдиреЛрдЯ рдХреЛ рдмрдЪреНрдЪреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдЪрд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрдЪреНрдЪреЗ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдмрд╕ рдпрд╣ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рднрд╛рд╡рдХ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗред
рдпрд╛рдиреА рдпрджрд┐ рд╣рдо рдПрдХ рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдиреЛрдЯ рд╣реИ рдЬреЛ рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореВрд▓ рдиреЛрдЯ рдХреА рдмрдЪрдд рдХреЛ рд░реЛрдХреЗрдВ рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА рдмрдЪреНрдЪреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рд╣реЛ рдЬрд╛рдПрдВред
рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдРрд╕реА рдЧрд╣рд░реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдорд┐рд▓рддреА рд╣реИред

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рдЧрд▓ рд╣реИ рдФрд░ рдЙрд╕рдиреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрдм рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдРрд╕реА рд╢рд╛рдЦрд╛ рдЦреБрд▓реАред

рд╣рдо рддреБрд░рдВрдд "рджреВрд╕рд░рд╛ рдиреЛрдЯ" рдирд╣реАрдВ рдмрдЪрд╛ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рдЕрдиреНрдп рд╕рднреА рдиреЛрдЯреЛрдВ рдХреЗ рд╕рдВрдкрд╛рджрди рдЦреЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдЯреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХреНрд░рдо рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдХреБрдЫ рднреА рдпрд╛рдж рди рд╣реЛ? 8.6, рдлрд┐рд░ 4, рдлрд┐рд░ 2 рдФрд░ рдкреНрд░рд╢реНрдиред
рд▓реЗрдХрд┐рди рд╣рдо рджрдмрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрдЪрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдирд┐рдХрдЯрддрдо рдмрдЪреНрдЪреЛрдВ рдХреЛ рдвреВрдВрдвреЗрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ .closest () рд╡рд┐рдзрд┐, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред

рд╕рдорд╛рд░реЛрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЖрд╡реЗрджрди
 //      beforeSend ,   - getClosestChildrens saveData: function() { .... beforeSend: function(xhr){ var $inner_notes = $li.find('ul .save').not('.ignore'), //          $children_notes = getClosestChildrens($inner_notes); if($children_notes.length) { var deferreds = []; $children_notes.each(function() { deferreds.push(app.saveData.call(this)); }); //          $.when.apply(null, deferreds).always(function() { //       //      ,   . // self        . app.saveData.call(self); }); //   / xhr.abort(); } }, .... } //      (    ). //            //        ,    . // ..   " ",     . function getClosestChildrens($inner_notes) { var children_notes = $.grep($inner_notes, function(value, key) { var is_child_of = false, $btn = $(value), $parent_li = $btn.closest('li'); $inner_notes.not($btn).each(function(key,v) { if($(this).closest($parent_li).length) { is_child_of = true; } }); return is_child_of ? false : true; }); return $(children_notes); } 


рдЕрдм рдирд┐рд╖реНрдкрд╛рджрди рддрд░реНрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
  1. рдкреНрд░рд╢реНрди рдкрд░ "рд╕рд╣реЗрдЬреЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
  2. рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕рднреА рдиреЛрдЯреЛрдВ рдХреЛ рдкрд╛рдПрдВ, рд╣рдо рдирд┐рдХрдЯрддрдо рдмрдЪреНрдЪреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рддреНрдпрд╛рдЧ рджреЗрддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рдиреЛрдЯ рд░рд╣рддрд╛ рд╣реИред рд╣рдо рд╕рд╡рд╛рд▓ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рджреВрд╕рд░рд╛ рдиреЛрдЯ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред
  3. рд╣рдо 2 рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдШреЛрдВрд╕рд▓реЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ (4, 8, 6) рдкрд╛рддреЗ рд╣реИрдВ, рд╣рдо рдирд┐рдХрдЯрддрдо рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рддреНрдпрд╛рдЧ рджреЗрддреЗ рд╣реИрдВред рдЕрд╡рд╢реЗрд╖ 4 рдФрд░ 6. рд╣рдо 2 рдХреЗ рдиреЛрдЯреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рд╣рдо 4 рд╡реЗрдВ рдФрд░ 6 рд╡реЗрдВ рдмрдЪрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред
  4. рд╣рдо 6 рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдИ рдШреЛрдВрд╕рд▓рд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ, рдЗрд╕реЗ рдмрдЪрд╛рддреЗ рд╣реИрдВред
  5. рд╣рдо 4 рд╡реЗрдВ рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдиреЗрд╕реНрдЯрд┐рдВрдЧ (8e) рдкрд╛рддреЗ рд╣реИрдВред рд╣рдо 4 рдХреЗ рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рд╣рдо 8 рд╡реАрдВ рдмрдЪрдд рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред
  6. рд╣рдо 8 рд╡реЗрдВ рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдИ рдШреЛрдВрд╕рд▓рд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ, рдЗрд╕реЗ рдмрдЪрд╛рдПрдВред
  7. рд╣рдо 8 рд╡реАрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред 4 рд╡рд╛рдБ рдиреЛрдЯред рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░, рдмрдЪрд╛рдУред
  8. рд╣рдо 8 рд╡реЗрдВ рдФрд░ 6 рд╡реЗрдВ, рдпрд╛рдиреА рдХреЗ рд▓рд┐рдП рдореВрд▓ рдиреЛрдЯ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рдиреЛрдЯред рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░, рдмрдЪрд╛рдУред
  9. рд╕рд╡рд╛рд▓ рдмрдЪрд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░, рдмрдЪрд╛рдУред


ps1 рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд░рд┐рд░рдХреНрд╖рдг рдХреЛ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╢реНрди рд╕рдмрд╕реЗ рдКрдкрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдХрдард┐рди рд╡рд┐рдХрд▓реНрдкред рдмреЗрд╢рдХ, рдЕрдЧрд░ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдиреЛрдЯреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд░ рд╕рд╣реЗрдЬреЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, 2 рдореА рдХрд╛ рдХрд╣рдирд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдиреЛрдЯ рднреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред

ps2 рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ saveData рдлрд╝рдВрдХреНрд╢рди рджрд┐рдЦрд╛рдпрд╛, рдЬрд┐рд╕реЗ рдЖрдЗрдЯрдо рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ EditData рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╣рд▓реЗ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдк рд╕рдВрдкрд╛рджрди рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдХрд╣рддреЗ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рд╣рдо рдкреНрд░рд╢реНрди рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрджрд░ рдЕрднреА рднреА рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдиреЛрдЯ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рднреА рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдбреЗрдореЛ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдбреЗрдЯрд╛ рдЦреЛрдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдШреЛрдВрд╕рд▓реЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдереЛрдбрд╝рд╛ php (рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВ рдореИрдВ jsField рдкрд░ рдбреЗрдореЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдореИрдВрдиреЗ рдЧрд┐рддреБрдм рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдЗрдЪреНрдЫреБрдХ рд╡реНрдпрдХреНрддрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЦреЗрд▓ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдУрд╡рд░рд▓реЛрдбреЗрдб рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ рдбреЗрдореЛ рднреА рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ, рдбреЗрдореЛ рджреЗрдЦреЗрдВ ред

рдореИрдВрдиреЗ 1 рд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА рдХреЛ рдЬреЛрдбрд╝рд╛ рддрд╛рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдПрдХ рдкреНрд░рд╢реНрди / рдиреЛрдЯ рд╕рдВрдкрд╛рджрд┐рдд рдпрд╛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдЖрдЙрдЯ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рд╡рд░реНрддрдорд╛рди рдмреНрд▓реЙрдХ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдЭрдкрдХреА рд▓реЗрддреА рд╣реИред рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рд╕рдм, рдореБрдЭреЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In204456/


All Articles