
рджреЗрд░ рд╢рд╛рдо, рдореБрдЭреЗ Backbone.js рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА jQuery рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╕реЗрд╡рд╛ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ред рд╕реЗрд╡рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдореИрдВ рдХреНрд▓рд┐рдХ, рдЕрдиреБрд░реЛрдз рдФрд░ рддрд░реНрдХ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рдЗрд╕ рдвреЗрд░ рд╕реЗ рдердХ рдЧрдпрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрдХреВрд▓ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЪрдврд╝ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рдореИрдВ рдмреЗрд╡рдХреВрдл рд╣реВрдВ, рдпрд╛ рдореЗрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдиреЗ рдореБрдЭреЗ, рдпрд╛ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд▓рд╛рдирдд рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рджреВрд╕рд░реА рдмрд╛рд░ рдкрдврд╝рд╛, рдзреНрдпрд╛рди рд╕реЗ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдореИрдВрдиреЗ Google рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ ToDo List рдХрд╛ рдЙрджрд╛рд╣рд░рдг рднреА рдкрдврд╝рд╛ред рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдмрд┐рд▓реНрдХреБрд▓ рдЬрдм рддрдХ рдореИрдВрдиреЗ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдкрд╛рдпрд╛, рд╕рдм рдХреБрдЫ рдЕрдВрдЧреНрд░реЗрдЬреА рдФрд░
рдЕрдиреБрд╡рд╛рдж рджреЛрдиреЛрдВ рдореЗрдВ рд▓рд┐рдпрд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЕрдм рдореИрдВ рд╕рдм рдХреБрдЫ рд╕рдордЭ рдЧрдпрд╛ред рдореИрдВрдиреЗ рддрдВрдЬ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди ... рдПрдХ рдкрддреНрдерд░ рдХрд╛ рдлреВрд▓ рдорд╛рд╕реНрдЯрд░ рджрд╛рдиреАрд▓рд╛ рд╕реЗ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдпрд╛рдиреАред рдпрд╣ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдлреВрд▓ рдирд╣реАрдВ рдерд╛, рдФрд░ рдкрддреНрдерд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рдЧрдВрдз рдЖ рд░рд╣реА рдереАред рдлрд┐рд░, рдПрдХ рдореЗрд╣рдирддреА рдЫрд╛рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЦрд░реЛрдВрдЪ рд╕реЗ "рд╣реИрд▓реЛ,
рдХрд┐рдЯреА рд╡рд░реНрд▓реНрдб" рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реБрдП рдФрд░ hg рдореЗрдВ рдЪрд░рдгреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░реЗ рдЬреИрд╕реЗ рдЙрдкрд╣рд╛рд░ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреИрдХрдмреЛрди.рдЬреЗрдПрд╕ рдврд╛рдВрдЪреЗ рдХрд╛ рдкрд░рд┐рдЪрдп рдорд┐рд▓рд╛ред
рдЯрд╛рд╕реНрдХред
рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рдЪреБрдирддреЗ рд╣реИрдВред рд╣реИрд▓реЛ рд▓рд┐рдЦреЛ, рд╡рд┐рд╢реНрд╡? рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдмрд╕ рдирдорд╕реНрддреЗ, <рдирд╛рдо> рд▓рд┐рдЦрдирд╛ рдкрд╕рдВрдж рд╣реИред рдХреНрдпрд╛ рд╣рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдСрдлрд▓рд╛рдЗрди рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд╕рд╛рде GTD рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реА "рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА" рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред 3 рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдЬ рдмрдирд╛рдПрдБред рдкрд╣рд▓реЗ рд░рд╛рдЬреНрдп рдореЗрдВ, рд╡реНрдпрдХреНрддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдЙрд╕реЗ рдмрдзрд╛рдИ рджреА рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рджрд░реНрдЬ рдирд╛рдо рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреАрд╕рд░реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдпрджрд┐ рдирд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛ рддреЛ рд╡реЗ рдкрд░реЗрд╢рд╛рди рд╣реИрдВред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╣реИ рдФрд░ рдХрд╣реАрдВ рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реЛрдЧреА рдЬреЛ рдХрд┐ рдмреИрдХрдСрди рдореЗрдВ рд╣реИред
рд╣рдо рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ
рднрд╛рдбрд╝реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдЪрд╛рдПрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдЪрд░рдг рдХреЛ рдкрдврд╝рдирд╛, рдЖрдк
рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ (+
рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ , рдпрджрд┐ рд▓реЛрдЧ рдЗрд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ) рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╢реЛрдзрди рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ
hg update --rev < >
рдлрд┐рд░ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╕рдордЭреЗрдВ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рд╕рдордЭрддреЗ рд╣реИрдВ :)
рдЪрд░рдг 0. рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдкреИрдЯрд░реНрди (рд╕рдВрд╢реЛрдзрди 0)

рд╣рдо рдПрдХ рд╢реИрдХреНрд╖рдгрд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдЪрд┐рддреНрд░ рдореЗрдВред рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕ рдкрд╡рд┐рддреНрд░ рдЧреЛрд▓реА рдХреЗ рд▓реЗрдЦрдХ рдХреМрди рд╣реИрдВ, рдЬрд┐рдирд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдЧрд╛рдп рдХреЛ рдкрд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕рднреА рдЦрд╛рд▓реА рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ index.html рдлрд╝рд╛рдЗрд▓ред рд╢реИрд▓рд┐рдпрд╛рдБ css рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВ, рдЪрд┐рддреНрд░ i рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ js рдореЗрдВ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдореЗрдВ jquery, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдФрд░ рдмреИрдХрдмреЛрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред
Html рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рдЦрд╛рд▓реА рдкреГрд╖реНрда рд╣реИред рдпрд╛рдиреА рдЦрд╛рд▓реА рд╢рд░реАрд░ рдФрд░ рдЬреБрдбрд╝реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╢реИрд▓реА рдХреЗ рд╕рд╛рде рдкреГрд╖реНрдаред
рдпрд╛рдиреА рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ mvc рдЪреМрдЦрдЯреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рд╢реЗрд╖ рддреИрдпрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░реАрдврд╝ рдкрд░ "рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"ред
рдЪрд░рдг 1ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЗрдЖрдЙрдЯ (Rev 1)
рд╣рдорд╛рд░реЗ рдкреГрд╖реНрда, рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░, 3 рд░рд╛рдЬреНрдп рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ, рдПрдХ рд╕рдлрд▓ рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЬреНрдп, рдПрдХ рдЕрд╕рдлрд▓ рддреБрд▓рдирд╛ рд╡рд╛рд▓рд╛ рд░рд╛рдЬреНрдпред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо 3 divas рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдпред
<div id="start" class="block"> <div class="userplace"> <label for="username"> : </label> <input type="text" id="username" /> </div> <div class="buttonplace"> <input type="button" value="" /> </div> </div> <div id="error" class="block"> . </div> <div id="success" class="block"> . </div>
рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдЖрдВрдЦреЛрдВ рд╕реЗ # рд╢реЗрд░ рдФрд░ # рдЕрд╕рдлрд▓ рдмреНрд▓реЙрдХ рдЫрд┐рдкрд╛рдПрдВред
#error, #success { ... display: none; }
рдЗрд╕ рдХрджрдо рдкрд░, рд╣рдордиреЗ рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред рдпреЗ рдЪрд░рдг рдХрдИ рдПрдХрд▓-рдкреГрд╖реНрда рд╕рд╛рдЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВред
рдЪрд░рдг 2. рд░реВрдЯрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (2 рд░реЗрд╡)
0.5.0 рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд╣реИрд╢ рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдпрд╛рдиреА рдпрд╣ рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рдХрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рдмрд╕ рд╣реИрд╢ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдХ рд╣реИред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рддрд░реНрдХ рдиреЗ рдКрдкрд░реА рд╣рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд╛рдЙрдЯрд░ рд╡рд░реНрдЧ рд╣реИред
рд╕реНрдерд╛рди рдХреНрдпрд╛ рд╣реИред рдпрд╣, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЖрдк рд╣рдм (
рдпрд╣рд╛рдВ ,
рдпрд╣рд╛рдВ рдпрд╛
рдпрд╣рд╛рдВ ) рдкрд░ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рд╣рдо index.html рдореЗрдВ рдПрдХ impromptu рдореЗрдиреВ рдмрдирд╛рдПрдВрдЧреЗ
<div id="menu"> <ul> <li><a href="#!/">Start</a></li> <li><a href="#!/success">Success</a></li> <li><a href="#!/error">Error</a></li> </ul> </div>
рдФрд░ рдлрд┐рд░ рдХрд▓рд╛рдИ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫреЗ рдХреЗ рд╕рд╛рде рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдп рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
var Controller = Backbone.Router.extend({ routes: { "": "start",
рдЗрд╕ рд╕рд░рд▓ рдХреЛрдб рдХреЗ рд╕рд╛рде, рд╣рдордиреЗ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдмреБрдХрдорд╛рд░реНрдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЯреИрдм-рдЙрдиреНрдореБрдЦ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдИред
рдЪрд░рдг 3. рд╕рдмрд╕реЗ рд╕рд░рд▓ рджреГрд╢реНрдп (Rev 3)
рдмреИрдХрдмреЛрди рдореЗрдВ рджреЗрдЦреЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдПрдХ рдорд┐рд╢реНрд░рдг рд╣реИ рдФрд░ рдорд╛рдирдХ рдПрдорд╡реАрд╕реА рдореЙрдбрд▓ рд╕реЗ рджреЗрдЦреЗрдВред рдпрд╣ рдмрд╕ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ рдПрдХ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ / рдШрдЯрдХ рд╣реИ рдЬреЛ рдЦреБрдж рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрдорд╛рддрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдФрд░ рд╡реНрдпреВ рдЯреВ рд╡рд┐рджрд╛рдЧреЗрдЯ (рдпрд╛ рдШрдЯрдХ) рдХрд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд░рд╛рдЙрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдЬреЗрдЯ рд╣реИ, рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯ рдмреНрд▓реЙрдХ рд╣реИред рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрджрд┐ "рдкрд░реАрдХреНрд╖рдг" рдирд╛рдо рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╣реИрд╢ рдЯреИрдЧ #! / рд╕рдлрд▓рддрд╛ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕рдлрд▓рддрд╛ рдмреНрд▓реЙрдХ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдХреБрдЫ рдФрд░ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╣реИрд╢ рдЯреИрдЧ #! / рддреНрд░реБрдЯрд┐ рд╕реЗ рдЧреБрдЬрд╝рд░реЗрдВрдЧреЗ, рдЬреЛ рддреНрд░реБрдЯрд┐ рдмреНрд▓реЙрдХ рджрд┐рдЦрд╛рдПрдЧрд╛ред рд╡реИрд╕реЗ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╣рдо рдореЗрдиреВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ, рд╣рдореЗрдВ рдЕрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
var Start = Backbone.View.extend({ el: $("#start"),
рд╡реИрд╕реЗ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдмреИрдХрд╕реНрдкреЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд╣реИрд╢ рдХрд╛ рдЬрд╛рджреВ рд╣реИред
Remarqueред JQuery рдХрд╛ рд░рд╛рд╕реНрддрд╛ (Rev 4)
рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рддрдирд╛ рдХреЛрдб рд▓рд┐рдЦ рдЪреБрдХреЗ рд╣реИрдВ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкрдврд╝ рдЪреБрдХреЗ рд╣реИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ
рдХреЙрдЧреНрдиреЗрдХ рдПрдХреНрд╕рдХреНрд▓реВрд╕рд┐рд╡
рдорд┐рд▓реЗрдЧрд╛ : "рдпрд╣ jQuery рдкрд░ рддреЗрдЬреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред" рдореИрдВ рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
$("#start input:button").click(function () {
рд▓реЗрдХрд┐рди ... рдпрд╣ рдХреЛрдб рд╣реИрд╢ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдлреИрд▓рддрд╛ рд╣реИ рдФрд░ рдмрд╣реБрдд рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред
рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗрд╡рд▓ 20% рд╕рдордп рдХреЗ рд▓рд┐рдП рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдЕрдкрдиреЗ рд╕рдордп рдХрд╛ 80%, рд╡рд╣ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдбреЙрдХ рдХрд░реЗрдЧрд╛, рддреНрд░реБрдЯрд┐ рд╕реБрдзрд╛рд░ рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ред рдФрд░ jQuery рдХреЗ рдиреВрдбрд▓ рд╕рдорд░реНрдерди рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рдмрд╡рд╛рд╕реАрд░ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЕрдкрдШрдЯрди рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдмреИрдХрдмреЛрди рдПрдХ рддреИрдпрд╛рд░ рдмрд╛рдЗрдХ рд╣реИред рдЬрдм рдПрдХ рдЕрдЪреНрдЫрд╛ рдЪрд╛рдЪрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рддреЛ рдХреБрдЫ рдирдпрд╛ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
рдЪрд░рдг 4. рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ (рд░рд┐рд╡рд╛рдЗрдЬ 5)
рджреГрд╢реНрдп рдПрдХ рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ, рдпрджрд┐ рдпрд╣ рдЦреБрдж рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдХрд╛ рдЕрдкрдирд╛ рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред рдордЬрд╛рдХрд┐рдпрд╛ рд╣реИ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ ... рдЗрд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреВрд▓ рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рджреЗрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдмрд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдЬрди рдЬреЙрди рд░реЗрд╕рд┐рдЧ рд╕реЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░редрдЬреЗрдПрд╕ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рдпрд╛ Microsoft рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЪрд╛рд▓рд╛рдХреА рд╕реЗ рдЪрдХрдорд╛ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдиреЙрдХрдЖрдЙрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЗрдПрд╕ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рддрд░реНрдХ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЕрдкрдиреЗ рдбрдВрдк рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реВрдВ)
рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрдбрд░рд╕реНрдХреЛрд░.рдЬреЗрдПрд╕ рд╕реЗ рдХреЗрд╡рд▓ _Template рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреЗрдЬ рдкрд░ рдПрдХ рдЦрд╛рд▓реА рдмреНрд▓реЙрдХ рдмрдирд╛рдПрдВ рдФрд░ рд╕рднреА "рдлрд┐рд▓рд░реНрд╕" рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдкреГрд╖реНрда рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
<div id="block" class="block"> </div> <script type="text/template" id="start"> <div class="start"> <div class="userplace"> <label for="username"> : </label> <input type="text" id="username" /> </div> <div class="buttonplace"> <input type="button" value="" /> </div> </div> </script> <script type="text/template" id="error"> <div class="error"> . <%= username %> . <a href="#!/">Go back</a> </div> </script> <script type="text/template" id="success"> <div class="success"> <%= username %> . <a href="#!/">Go back</a> </div> </script>
рдбрд╛рдпрдирд╛рдорд┐рдХреНрд╕ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдпреВрдЬрд╝рд░рдиреЗрдо рдХреЛ рд░рд┐рдЬрд▓реНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ред
рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ AppState рдЪрд░ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ
var AppState = { username: "" }
рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рд▓рд┐рдЦреЗрдВред
var Views = { }; var Start = Backbone.View.extend({ el: $("#block"),
рдиреЛрдЯред рд╣рдо рдкрд░ 3 рджреГрд╢реНрдп рдПрдХ рд╣реА DOM рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рднреЗрдЬреЗ рдЧрдП рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рд╡рд┐рдЬреЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рджреГрд╢реНрдп рдХреА рдХреНрд╖рдорддрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдмреВрдЭрдХрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕ рдХрджрдо рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ред рдмрд╛рдж рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рдкрдВрдЪрд░ рд╕реЗ рдХреИрд╕реЗ рдмрдЪрд╛ рдЬрд╛рдПредрдирд┐рдпрдВрддреНрд░рдХ рдЫреЛрдЯреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рднреА рдЧреБрдЬрд░реЗрдЧрд╛ред
var Controller = Backbone.Router.extend({ routes: { "": "start",
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдордиреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдкреАрдХрд░ рдЬреЛрдбрд╝реЗ рд╣реИрдВред
рдЪрд░рдг 5. рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг (рд╕рдВрд╢реЛрдзрд┐рдд 6)
рди рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд░рдгреА рдореЗрдВ рдирд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред
рдЪрд▓рд┐рдП рдлреИрдорд┐рд▓реА рдРрд░реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕рднреА рдирд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
var Family = ["", "", ""];
рдФрд░ рд╣рдо рдкреНрд░рд╛рд░рдВрдн рджреГрд╢реНрдп рдХреЗ рдХреЛрдб рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЗрд╕реЗ _.detect рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ
... if (_.detect(Family, function (elem) { return elem == AppState.username }))
рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ? рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХрд▓ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд░рдгреА (рд╕рд░реНрд╡рд░, рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреЛрд░, рдЖрджрд┐) рдХреЗ рднреМрддрд┐рдХ рд╕реНрдерд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╡реНрдпреВ рдХреЗ рддрд░реНрдХ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╛рдиреА рджреГрд╢реНрдп рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдЗрддрдирд╛ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ рдХреЛрдб рдорд╛рдореВрд▓реА рдЫреАрдВрдХ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдЯрд┐рдкреНрдкрдгреА 2. jQuery рд░рд╛рд╕реНрддрд╛ред рдирд┐рд░рдВрддрд░рддрд╛ (7 рд╡рд░реНрд╖)
рдФрд░ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ jQuery рдХреЛрдб рдореЗрдВ рдХрд┐рддрдирд╛ рдХреЛрдб рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛? рдмрд╣реБрдд рдХрдо:
$(function () { var Family = ["", "", ""]; $("#start input:button").click(function () {
рдареАрдХ рд╣реИ, рддрджрдиреБрд╕рд╛рд░, рд▓реЗрдЖрдЙрдЯ рд▓реЗрдЖрдЙрдЯ рдХреЛ рд╕рд╣реА рдХрд░реЗрдВ:
... <div id="error" class="block"> . <span class="username"></span> . <a href="javascript:void(0);">Go back</a> </div> <div id="success" class="block"> <span class="username"></span> . <a href="javascript:void(0);">Go back</a> </div> ...
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рд╕рдорд░реНрдерди, 80/20% рдФрд░ рдЕрдиреНрдп dregs рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣рд╛ рд╣реИ? рддреЛ рдпрд╣рд╛рдБ рд╣реИред рдЗрд╕реЗ рднреВрд▓ рдЬрд╛рдУред рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП jQuery рдХреА рд╢реИрд▓реА рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд╢рд░реНрдордирд╛рдХ рдирд╣реАрдВ рд╣реИред рдЖрдк рдмреИрдХрдмреЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рд╕рдм рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 10-20 рдЧреБрдирд╛ рдХрдо рд╕рдордп рдЦрд░реНрдЪ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдХреЛрдб рдХрд╛ рдЖрдХрд╛рд░ рдЖрдкрдХреЛ рдЖрдзреЗ рд▓реАрдЯрд░ рдХреЗ рдмрд╛рдж рд░рд╛рдд рдореЗрдВ рднреА рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЕрдкрдиреЗ $ 5 рдХрдорд╛рдиреЗ рдореЗрдВ рд╢рд░реНрдордирд╛рдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдЬреЛ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИ, рдЙрд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЕрдкрдиреА рд░рд╛рдп рджреЗрдиреЗ рджреЗрдВред
рдореБрдЭреЗ рдпрд╣ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рджреЛрд╣рд░рд╛рдирд╛ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рд╕рднреА рд░реВрдкрд░реЗрдЦрд╛рдПрдБ 2 рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рддреА рд╣реИрдВ, рдПрдХ рдмрд┐рд▓рд┐рдпрди-рдбреЙрд▓рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдПрдХ рдорд┐рд▓рд┐рдпрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдПрдХ $ 100 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдХреБрдЫ рдорд┐рд▓рд┐рдпрди рдкреНрд░реЛрдЬреЗрдХреНрдЯред рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдПрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕рдордп рдФрд░ рдзрди рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред
рдЪрд░рдг 6. рдореЙрдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡реЗрджрди рдирд┐рдпрдВрддреНрд░рдХ (8 рд╕рдВрд╢реЛрдзрди)
рдмреИрдХрдмреЛрди рдХреА рдПрдХ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рдореЙрдбрд▓ рдФрд░ рдПрдХ рджреГрд╢реНрдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдореЙрдбрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рджреГрд╢реНрдп рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ, рдЖрдк рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡реНрдпреВ рдХреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдореЙрдбрд▓ рдпрд╛ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрджрд▓рд╛ рд╣реБрдЖ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕рдВрджреЗрд╢ рдкрд░ рдкреНрд░рд╛рд╡рдзрд╛рди рдХреЗ рдХреБрдЫ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдкреВрд░реНрдг рдпрд╛ рдЖрдВрд╢рд┐рдХ рдкреБрдирд░реНрд╡рд┐рдХрд╛рд╕ред
рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ рдЬрдм рдПрдХ рд╣реА рдмреНрд▓реЙрдХ рдХреЛ рдХрдИ рд╡реНрдпреВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЗрд╕ рдкреНрд░рднреБрддреНрд╡ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, AppState рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ, рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрдЧреА:
var AppState = Backbone.Model.extend({ defaults: { username: "", state: "start" } }); var appState = new AppState();
рджреВрд╕рд░рд╛ рдЪрд░рдг рд╕рдлрд▓рддрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИ, рдФрд░ рджреЗрдЦреЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдмреНрд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдИ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдЧрд╛, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЛред рд╢реЗрд╖ рджреГрд╢реНрдп рдореЗрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдВрдЧреЗ
var Block = Backbone.View.extend({ templates: {
рджреГрд╢реНрдп рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ, рд╣рдо рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рд╣рдо рдПрдХ рдмреНрд▓реЙрдХ redraw рд▓рдЯрдХрд╛рдПрдВрдЧреЗред
initialize: function () {
Redraw рдлрд╝рдВрдХреНрд╢рди рдореЙрдбрд▓ рдХреЗ рд░рд╛рдЬреНрдп рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рдореЙрдбрд▓ рдХреЛ рдЙрдкрдпреБрдХреНрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛:
render: function () { var state = this.model.get("state"); $(this.el).html(this.templates[state](this.model.toJSON())); return this; }
рдЪреЗрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рд╡рд╣ рдЙрдкрдпреБрдХреНрдд рдореЙрдбрд▓ рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░реЗрдЧреА:
check: function () { var username = this.el.find("input:text").val(); var find = (_.detect(Family, function (elem) { return elem == username }));
рд╡реИрд╕реЗ, рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рджреГрд╢реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ, рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ:
var block = new Block({ model: appState }); appState.trigger("change");
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╣реИрд╢ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рдЪрд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреА рдЙрдбрд╝рд╛рди рднрд░реАред рдЙрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд╛рдЙрдЯрд░ рдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред
var Controller = Backbone.Router.extend({ routes: { "": "start",
рдореИрдиреБрдЕрд▓ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЪреЗрдХ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреЗрдЬ рдПрдбреНрд░реЗрд╕ рдХрд╛ рд╣реИрд╢ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рд╣рдо рдореЙрдбрд▓ рдХреЗ рд░рд╛рдЬреНрдп рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдХрд░ рдЗрд╕ рдХрд╖реНрдЯрдкреНрд░рдж рджреЛрд╖ рдХреЛ рдареАрдХ рдХрд░реЗрдВрдЧреЗ:
appState.bind("change:state", function () {
рдЗрд╡реЗрдВрдЯреНрд╕ рдмреИрдХрдмреЛрди рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЧрд╛рдирд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдФрд░ рдЗрд╡реЗрдВрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдЕрджреНрднреБрдд рд╡рд┐рдВрдЯреЗрдЬ рдмрдирд╛рддреЗ рд╣реБрдП, рд╕рд░рд▓рддрдо рдИрд╡реЗрдВрдЯ, DOM рдИрд╡реЗрдВрдЯреНрд╕ рдФрд░ рдореЙрдбрд▓ рдпрд╛ рдХрд▓реЗрдХреНрд╢рди рдЪреЗрдВрдЬ рдИрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╡рд░реНрдгрд┐рдд рдИрд╡реЗрдВрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЗрд░реА рд╕рд▓рд╛рд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Backbone.js рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВред
рдпрд╣ рд╕рдм рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рд╣реИред рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рди рдХрд┐ рд╡реНрдпреВ рдХреЗ рд╕рд╛рде, рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдЖрдкрдХреЗ рдмрд╛рд▓ рд╣реЛрдВрдЧреЗ, рдмрд╕ рд╣реЛрдЧрд╛ред
рдЪрд░рдг 7. рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг (Rev 9)
рдЪрд░рдг 5 рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХреА рдЦрд╛рдореА рд╣реИред рд╣рдордиреЗ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рддрд░реНрдХ рдорд┐рд▓рд╛рдпрд╛ред рджреГрд╢реНрдп рдХреЗ рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдП рдмрд┐рдирд╛, рд╣рдо рдЕрдкрдиреЗ рд╕рд░рдгреА рдХреЛ рд╕реЗрд╡рд╛ рдореЗрдВ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдмреИрдХрдмреЛрди рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рд╕реЙрд░реНрдЯ рд╕реЗрдЯ рд╣реИ рдЬреЛ рдЗрди рдореЙрдбрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╕реЙрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЧреНрд░рд╣ REST рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╡рд┐рдЬреЗрдЯ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рдПрдХ рдкрд░рдд рд╣реИред
рдЖрдЗрдП рд╣рдо рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд╕реЗ рд▓реМрдЯрддреЗ рд╣реИрдВред UserNameModel рдореЙрдбрд▓ рдмрдирд╛рдПрдБред рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдлрд╝реАрд▓реНрдб рд╣реЛрдЧрд╛, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд░рд┐рдХреНрдд рдорд╛рди рд╣реИред
var UserNameModel = Backbone.Model.extend({
UserNameModel рдореЙрдбрд▓ рд╕реЗ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдПрдБ
var Family = Backbone.Collection.extend({
рдЗрд╕ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реНрдерд╛рди рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ
checkUser: function (username) {
рдкрд░рд┐рд╡рд╛рд░ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБ
var MyFamily = new Family([
рдЙрд╕рдХреЗ рдмрд╛рдж, MyFamily рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпреВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрдпрд╛рдкрди рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
var find = MyFamily.checkUser(username);
рдирд┐рд╖реНрдХрд░реНрд╖
рд▓реЗрдЦ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИ рдЬреЛ рдХреЛрдИ рдмрд╣реБрдд рдмреБрд░рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬреЛ рдореЗрд░рд╛ рдордд рд╣реИ, рд╡рд╣ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 200 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рдпрд╣ jQuery рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВред
рдмреИрдХрдмреЛрди рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрддреНрдкрд╛рдж рдирд┐рдХрд▓рд╛ рдЬреЛ рдЖрдкрдХреЛ рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд░рд┐рдЬ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ-рдкреЗрдЬ рдХреА рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдмрдбрд╝реЗ рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░, рдХрднреА-рдХрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд▓рд╛рднрд╣реАрди рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рд╣рдо рдмрдврд╝рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рд╣реИ, рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЫреЛрдбрд╝рдХрд░, рд╕рдорд░реНрдерди рдХреА рд╢реНрд░рдо рд▓рд╛рдЧрдд рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред