
Backbone.js RIA рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓реЗрдЦрдХ рдЬреЗрд░реЗрдореА рдПрд╢рдХреЗрдирд╕ рд╣реИрдВ, рдЬреЛ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИрдВ, рдмреИрдХрдмреЛрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреНрд▓рд╛рдЙрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдпрд╣ рдЕрдВрдбрд░рд╕реНрдХреЛрд░.рдЬреЗрдПрд╕ рджреНрд╡рд╛рд░рд╛ "рд╕реНрд╡рд╛рдорд┐рддреНрд╡" рд╣реИред рдмреИрдХрдмреЛрди рдПрдХ рдмрд╣реБрдд рд╣рд▓реНрдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдмреИрдХрдмреЛрди рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЬреЛ рдЖрдХрд╛рд░ рдореЗрдВ 4Kb рд╕реЗ рдХрдо рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдПрдорд╡реАрд╕реА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
рдмреИрдХрдмреЛрди рдХреБрдВрдЬреА-рдореВрд▓реНрдп-рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдИрд╡реЗрдВрдЯ, рд╕рдореГрджреНрдз рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣, рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ (рдореВрд▓ рд╡рд┐рдЪрд╛рд░) рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдкреЗрд╢ рдХрд░рдХреЗ рднрд╛рд░реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдШреЛрд╖рдгрд╛рддреНрдордХ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдм рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдПрдХ RESTful JJ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдмрд┐рдирд╛
рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред REST API рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдФрд░
Backbone.View рдореЗрдВ DOM рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
json2.js рдФрд░ jQuery рдЬреИрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ:
jQuery рдпрд╛
Zeptoрд▓реЗрдЦ Backbone.js рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛, рдФрд░ рдЪрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдЯреЛрдбреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣рд╛рдБ рд╡реЗ рд▓рд╛рдн рд╣реИрдВ рдЬреЛ рдмреИрдХрдмреЛрди рд╣рдореЗрдВ рджреЗрддрд╛ рд╣реИред
рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ рдФрд░ рдХрд╕реНрдЯрдо рдЗрд╡реЗрдВрдЯреНрд╕
рдЬрдм рдореЙрдбрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддреА рд╣реИ, рддреЛ рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдП рдЧрдП рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп (рдореВрд▓ рд╡рд┐рдЪрд╛рд░) рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдвреАрд▓реЗ рдпреБрдЧреНрдорди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдореГрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдореГрджреНрдз рдПрдкреАрдЖрдИ
рдмреИрдХрдмреЛрди рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓реЗрдХрд░ рдЖрддрд╛ рд╣реИред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ "рдЕрдзреВрд░рд╛" рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╣реЛрддреА рд╣реИред
рдШреЛрд╖рдгрд╛рддреНрдордХ рдШрдЯрдирд╛ рдХреЗ рджреГрд╢реНрдп
рдЬрд┐рди рджрд┐рдиреЛрдВ рдЖрдкрдиреЗ рд╕реНрдкреЗрдЧреЗрдЯреА-рдЬреИрд╕реЗ рдХреЛрдб рд▓рд┐рдЦреЗ рдереЗ, рд╡реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рдХреЙрд▓рдмреИрдХ рдХрд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИред
RESTful JSON рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдпрджрд┐ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ "рджреГрд╢реНрдп" рдХреЛрдб рдореЗрдВ рдПрдХ AJAX рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рд╡рд╣ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рд╕рдм рд╡рд┐рднрд┐рдиреНрди xhr рдПрдбреЗрдкреНрдЯрд░, рд╡реЗрдм рдкреЙрдХреЗрдЯреНрд╕ рдФрд░ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЗрдХрд╛рдИ рдХреЛ рдХрдИ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмреИрдХрдмреЛрди рдЗрд╕рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛:
рдмреИрдХрдмреЛрди рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИред рдПрдХ рдореЙрдбрд▓ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЬрдм рджреГрд╢реНрдп рдореЙрдбрд▓ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рддрд╛ рд╣реИ (HTML рдореЗрдВ рдбреНрд░рд╛ рдХрд░рддрд╛ рд╣реИ)
рдореИрдВ рддреБрд░рдВрдд рдЙрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЕрдм рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
рдХреНрдпрд╛ рдпрд╣ jQuery рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ?
рдирд╣реАрдВред рд╡реЗ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИрдВред рдмреИрдХрдмреЛрди рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ jQuery рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбреЛрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдореИрдВ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реВрдВ?
рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛрдб рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓рдмреИрдХ, DOM рдЬреЛрдбрд╝рддреЛрдбрд╝, HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЧрдВрджрд╛ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTML рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдмреИрдХрдмреЛрди рдЗрд╕ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдмреИрдХрдмреЛрди рднрд╛рд░реА-рд╢реБрд▓реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдбреЗрдЯрд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GMail рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдирдпрд╛ рдЯреНрд╡рд┐рдЯрд░ рдпрд╛ рдЕрдиреНрдп рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧред рдмреИрдХрдмреЛрди рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк рд╕рд░рд▓ HTML рдкреЗрдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдореГрджреНрдз рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рдФрд░ рдмреИрдХрдмреЛрди рдХреЛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рдХреИрдкреНрдкреБрдХрд┐рдиреЛ рдпрд╛ рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?
рд╣рд╛рдБ рдФрд░ рдирд╣реАрдВред рд╣рд╛рдВ, рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЙрдкрд░реНрдпреБрдХреНрдд рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╣реИ, рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдирд╛ рд╣реИред рд╡реЗ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВ рдХрд┐ рдмреИрдХрдмреЛрди рдмрд╣реБрдд рд╣рд▓реНрдХрд╛ рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдмреИрдХрдмреЛрди рдмреЗрд╣рдж рд╣рд▓реНрдХрд╛ рд╣реИ, 4kb рд╕реЗ рдХрдо рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, 4kb рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ: Backbone 4kb + Underscore.js 3kb + jQuery 31KH = 38kbрдХреИрдкреБрдЪрд┐рдиреЛ рдЖрдкрдХреЛ рдЙрджреНрджреЗрд╢реНрдп-рдЬреЗ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдкреНрд░рд╛рдЙрдЯрдХреЛрд░ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдЧрд▓рдд рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдмреИрдХрдмреЛрди рдХреЗ рд╕рд╛рде рдЖрдк рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ HTML рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдореИрдВ рдмреИрдХрдмреЛрди рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
рдмреЗрд╢рдХред рди рдХреЗрд╡рд▓ DOM, AJAX рдХреЗ рд░реИрдкрд░ рддрдХ рдкрд╣реБрдВрдЪ, рдмрд▓реНрдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдбрд░ рднреАред рдмреИрдХрдмреЛрди рдореЗрдВ рдмрд╣реБрдд, рдмрд╣реБрдд рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдмреИрдХрдмреЛрди рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЕрдкрдиреЗ рд▓рдЧрднрдЧ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмреИрдХрдмреЛрди рдмрдирд╛рдПрдБ
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреИрдХрдмреЛрди рдореЗрдВ рдХреЗрд╡рд▓ рдореЙрдбрд▓, рджреГрд╢реНрдп рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╢рд╛рдорд┐рд▓ рдереЗ - рдирд┐рдпрдВрддреНрд░рдХ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдереЗред рд╕рдордп рдХреЗ рд╕рд╛рде, рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рдмреИрдХрдмреЛрди рдореЗрдВ рдЕрдм 4 рдореБрдЦреНрдп рд╡рд░реНрдЧ рд╣реЛрддреЗ рд╣реИрдВ:
- рдореЙрдбрд▓ (рдореЙрдбрд▓)
- рд╕рдВрдЧреНрд░рд╣ (рд╕рдВрдЧреНрд░рд╣)
- рджреЗрдЦреЗрдВ (рджреЗрдЦреЗрдВ)
- рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ (рдирд┐рдпрдВрддреНрд░рдХ)
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдореБрдЦреНрдп рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдЬрд╛рдПрдВ, рдлрд┐рд░ рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдПрдХ рд╕рд░рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗред
рдЖрджрд░реНрд╢
рд╡рд┐рднрд┐рдиреНрди рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдореЙрдбрд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреИрдХрдмреЛрди рдореЗрдВ, рдПрдХ рдореЙрдбрд▓ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рдХрдЯрддрдо рдПрдирд╛рд▓реЙрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИред рд▓реЗрдХрд┐рди рдХреЛрдИ рдХрдард┐рди рдФрд░ рддреЗрдЬрд╝ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИрдВред рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ:
рдореЙрдбрд▓ рдЙрди рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рджрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдбреЗрдЯрд╛ рдФрд░ рд╕рд╛рде рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдлрд╝реНрд░реЗрдо рдХрд░рддреЗ рд╣реИрдВ: рдкрд░рд┐рд╡рд░реНрддрди, рд╕рддреНрдпрд╛рдкрди, рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░ред
рдПрдХ рдореЙрдбрд▓ рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдЧреБрдг рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЙрдбрд▓ рд╣реИ:
var Game = Backbone.Model.extend({});
рдЖрдЗрдП рдЪреАрдЬреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдВ:
var Game = Backbone.Model.extend({ initialize: function(){ alert("Oh hey! "); }, defaults: { name: 'Default title', releaseDate: 2011, } });
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ, рдореИрдВ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдбреЗрдЯрд╛ рдХреЗ рдХреБрдЫ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореИрдВ рдХрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪрд░ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдБ:
рдЖрдк рд╕реАрдзреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ (object.attribute), рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдпрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреА)ред
рдЕрдм рд╕рд╛рд░рд╛ рдбрд╛рдЯрд╛ рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдореЛрд░реА рдореЗрдВ рд╣реИред рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╣реЗрдЬреЗрдВ:
portal.save();
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рдЬреНрдпрд╛рджрд╛ рдХреА рдЙрдореНрдореАрдж рдереА? AJAX? рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрдиреНрдпрдерд╛ PUT рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдореЙрдбрд▓реЛрдВ рдкрд░ рдЫреБрдЖред рдмреИрдХрдмреЛрди рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрдЧреНрд░рд╣
рдмреИрдХрдмреЛрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рдХреЗрд╡рд▓ рдореЙрдбрд▓реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдпреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдореЙрдбрд▓) рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред
рдЪрд▓реЛ рдЦреЗрд▓ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдПрдБ:
var GamesCollection = Backbone.Collection.extend({ model : Game });
рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкрд╣рд▓реА рдмрд╛рдд, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХреМрди рд╕реЗ рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рдордиреЗ рдЧреЗрдо рдореЙрдбрд▓ рд╕реЗ рдорд┐рд▓рдХрд░ рдЧреЗрдореНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдпрд╛ рд╣реИред
рдЕрдм рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рдЦреЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрджреНрдзрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
var GamesCollection = Backbone.Collection.extend({ model : Game, old : function() { return this.filter(function(game) { return game.get('releaseDate') < 2009; }); } });
рд╕рд░рд▓, рд╕рд╣реА? рд╣рдо рд╕рд┐рд░реНрдл рдЙрди рдЦреЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ 2009 рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдереЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ред рдЖрдк рд╕реАрдзреЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкреНрд░рдмрдВрдзрди рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var games = new GamesCollection games.get(0);
рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдирдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ ID 0. рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рддрддреНрд╡ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
games.at(0);
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЖрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдХреА рднрд░рдкрд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var GamesCollection = Backbone.Collection.extend({ model : Game, url: '/games' }); var games = new GamesCollection games.fetch();
рд╣рдо рдмреИрдХрдмреЛрди рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдЖрд░рдПрд▓ред рдЕрдЧрд▓рд╛, рд╣рдо рдмрд╕ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░
fetch
рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдЖрдк рдмреИрдХрдмреЛрди рд╕рдВрдЧреНрд░рд╣ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣рд╛рдБ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдмреИрдХрдмреЛрди рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рднреА рддрд░реАрдХреЗред рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд▓реЗрдЦрди рдкрдврд╝реЗрдВред
рд░рд╛рдп
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рджреГрд╢реНрдп рднреНрд░рд╛рдордХ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред рд╢реБрджреНрдз рдПрдорд╡реАрд╕реА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдмреИрдХрдмреЛрди рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рдкреНрд░рдЬрд╛рддрд┐рдпреЛрдВ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- DOM рдЗрд╡реЗрдВрдЯреНрд╕, рдореЙрдбрд▓реНрд╕ рдФрд░ рдХрд▓реЗрдХреНрд╢рди рдХреЛ рд╕реБрдирдирд╛ред
- рдЖрд╡реЗрджрди рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (рджреЗрдЦреЗрдВ рдкреНрд░рддрд┐рдкрд╛рджрди)ред
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рджреГрд╢реНрдп рдмрдирд╛рдПрдБ:
var GameView = Backbone.View.extend({ tagName: "div", className: "game", render: function() {
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдореИрдВ рдмрд╕ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рджреГрд╢реНрдп рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ HTML рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЯреИрдЧрдирд╛рдо рдФрд░ рдХреНрд▓рд╛рд╕рдиреЗрдо)ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдПрдХ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ:
render : function() { this.el.innerHTML = this.model.get('name');
el рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рджреГрд╢реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдмрд╕ HTML рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдЧреЗрдо рдХрд╛ рдирд╛рдо рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рд╣реИред
рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ HTML рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдердХрд╛рдК рдФрд░ рд╡реНрдпрд░реНрде рд╣реИред рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдмреИрдХрдмреЛрди рдХрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЯреЗрдВрдкрд▓реЗрдЯрд┐рдВрдЧ рдЗрдВрдЬрди (рдЕрдВрдбрд░рд╕реНрдХреЛрд░.рдЬреЗрдПрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛) рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рдЬрд╛рддрд┐рдпрд╛рдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕реБрдирддреА рд╣реИрдВред рдкрд╣рд▓реЗ DOM рдЗрд╡реЗрдВрдЯред
events: { 'click .name': 'handleClick' }, handleClick: function(){ alert('In the name of science... you monster');
рдмреЗрд╢рдХ, jQuery рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕рд░рд▓ рд╣реИред рд╣рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдХреМрди рд╕реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рднрд╛рдЧ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓рд╛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдШрдЯрдирд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдореЙрдбрд▓ рд╕реЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
var GameView = Backbone.View.extend({ initialize: function (args) { _.bindAll(this, 'changeName'); this.model.bind('change:name', this.changeName); } });
рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдмрдВрдзрди рдХреЛрдб рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдлрдВрдХреНрд╢рди рдореЗрдВ рдХреИрд╕реЗ рд░рдЦрддреЗ рд╣реИрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрддреА рдЬрдЧрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рд╣реИред
bindAll
рдПрдХ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рдВрдзрддреА рд╣реИред рдпрд╣ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИред
рдЕрдм, рдЬреИрд╕реЗ рд╣реА рдореЙрдбрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЪреЗрдВрдЬрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди
changeName
ред рдЖрдк
change:
рдмрдЬрд╛рдп рдЕрдиреНрдп рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ
change:
рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдирд┐рдпрдВрддреНрд░рдХ
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдиреЗ рдЖрдкрдХреЛ рдРрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИ рдЬреЛ рд╣реИрд╢ url (рд╣реИрд╢рдмреИрдВрдЧ) рдореЗрдВ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВред
var Hashbangs = Backbone.Controller.extend({ routes: { "!/": "root", "!/games": "games", }, root: function() {
рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рд░реНрд╡рд░ MVC рдЪреМрдЦрдЯреЗ рдореЗрдВ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
!/games
рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛ рдЬрдмрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ URL
domain/#!/games
ред
рд╣реИрд╢рдмреИрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ
рдХрд░рдХреЗ , рдЖрдк рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░
Google рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред
рдЕрдЧрд░ рдЖрдкрдХреЛ рдбрд░ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдмреИрдХ рдмрдЯрди рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛, рддреЛ рдмреИрдХрдмреЛрди рдЗрд╕рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░ рд╕рдХрддреА рд╣реИред
рдмреИрдХрдмреЛрди
#hash
рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдЬрдм рдЖрдк рдмреИрдХрдмреЛрди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг: рдЯреЛрдбреЛ рд╕реВрдЪреА
рдпрд╣ рдРрдк
J├йr├┤me Gravel-Niquet рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг
рд▓реЛрдХрд▓рд╕реНрдЯреЗрдЬ рдПрдбрд╛рдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдореИрдВ рдПрдбреЙрдкреНрдЯрд░ рдкрд░ рдирд╣реАрдВ рд░реБрдХрддрд╛, рдЗрд╕рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ - рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ)ред рджреЗрдЦреЗрдВ рдХрд┐ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЦрд┐рд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
рдЯреЛрдбреЛ рд╕реВрдЪреАрдЯреБрдбреВ рдореЙрдбрд▓
рд╣рдорд╛рд░рд╛ рдЖрдзрд╛рд░ рдореЙрдбрд▓ рдПрдХ рд╕реВрдЪреА рдЯреВрдбреВ рддрддреНрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ
content
,
order
рдФрд░
done
рдЧреБрдг рд╣реИрдВред
window.Todo = Backbone.Model.extend({
рдЯреБрдбреВ рд╕рдВрдЧреНрд░рд╣
рдЯреБрдбреВ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
window.TodoList = Backbone.Collection.extend({
рджреЗрдЦреЗрдВ - рдЯреБрдбреВ рддрддреНрд╡
рджреЗрдЦреЗрдВ - рдЖрд╡реЗрджрди
рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдореВрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред
window.AppView = Backbone.View.extend({
рдПрдиреЛрдЯреЗрд╢рди рд╡рд╛рд▓реЗ рдореВрд▓ рдХреЛ
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИредHTML рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ рд╕реАрдПрд╕рдПрд╕
<div id="todoapp"> <div class="title"> <h1>Todos</h1> </div> <div class="content"> <div id="create-todo"> <input id="new-todo" placeholder="What needs to be done?" type="text" /> <span class="ui-tooltip-top" style="display:none;">Press Enter to save this task</span> </div> <div id="todos"> <ul id="todo-list"></ul> </div> <div id="todo-stats"></div> </div> </div> <script type="text/template" id="item-template"> <div class="todo <%= done ? 'done' : '' %>"> <div class="display"> <input class="check" type="checkbox" <%= done ? 'checked="checked"' : '' %> /> <div class="todo-content"></div> <span class="todo-destroy"></span> </div> <div class="edit"> <input class="todo-input" type="text" value="" /> </div> </div> </script> <script type="text/template" id="stats-template"> <% if (total) { %> <span class="todo-count"> <span class="number"><%= remaining %></span> <span class="word"><%= remaining == 1 ? 'item' : 'items' %></span> left. </span> <% } %> <% if (done) { %> <span class="todo-clear"> <a href="#"> Clear <span class="number-done"><%= done %></span> completed <span class="word-done"><%= done == 1 ? 'item' : 'items' %></span> </a> </span> <% } %> </script>
рдореИрдВ CSS рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддрд╛,
рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╖рдп рд╣реИред
рдпрд╣реА рд╣реИ, рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рддреИрдпрд╛рд░ рд╣реИ, рдкрд░рд┐рдгрд╛рдо
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЖрдк рдмреИрдХрдмреЛрди рд╕реЗ рдХреНрдпрд╛ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдмреИрдХрдмреЛрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рдХреБрдЫ рд╕рдмрдХ рдЖрдк рдпрд╣рд╛рдВ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП MVC рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХреЗ рдРрд╕реЗ рдХреЛрдб рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдЦреБрдж рд╕реЗ рдмрдВрдзреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рдЧрдВрджрд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред
- DOM рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рд╕реНрдЯреЗрдЯреНрд╕ рд░рдЦрдирд╛ рдПрдХ рдмреБрд░рд╛ рдЖрдЗрдбрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреАрд╡реНрд░ рд╣реИ рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
- рдореЛрдЯреЗ рдореЙрдбрд▓ рдФрд░ рдкрддрд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ рдЕрдЪреНрдЫреЗ рд╣реИрдВред рдореЙрдбрд▓ рджреНрд╡рд╛рд░рд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред
- рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ HTML рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдмреБрд░реЗ рдХрд░реНрдо рдорд┐рд▓рддреЗ рд╣реИрдВред
рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдмреИрдХрдмреЛрди рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдкреВрдЫреЗрдВред
рд╡реЗ рд╕реНрд░реЛрдд рдЬреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рдереЗ
Backbone.js (рдЬрд┐рдо рд╣реЙрдХрд┐рдВрд╕) рдХреЗ
рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдРрдкреНрд╕ рдмрдирд╛рдПрдВBackbone.js (рд╕рд┐рджреНрдзрд╛рд░реНрде) рдХреЗ
рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛рдПрдбрд╛рдкреНрдЯрд░ рдмреИрдХрдмреЛрди-рд▓реЛрдХреЛрд╕реНрдЯреЛрд░реЗрдЬрдЯреЛрдбреЛрд╕ рдЙрджрд╛рд╣рд░рдг (рдЬреЗрд░реЛрдо рдЧреНрд░реЗрд╡рд▓ рдиреБрдХреАрдЯ)
рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде
Todos.js рд╕реНрд░реЛрддрдФрд░ рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ
рдЧрд┐рдЯрд╣рдм
рдмреИрдХрдмреЛрди рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди
рдЬреАрдердм рдкрд░
рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдкреНрд░рд▓реЗрдЦрди
рдиреЛрдб рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднрд╛рдЧ 19: рдмреИрдХрдмреЛрди.рдЬреЗрдПрд╕ (рдПрд▓реЗрдХреНрд╕ рдпрдВрдЧ)
рдПрдХ рдмрдбрд╝реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ (рдореВрд▓ Addy рдЙрд╕реНрдорд╛рдиреА, рдЕрдиреБрд╡рд╛рдж
trurl123 )