рдореИрдВ рдЙрди рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рд╛, рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛!
рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЬрд╛рдЗрдВрдЯ рдиреЗ ToDoMVC рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред Jiant рдПрдХ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд╣рд╛рдпрдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдЗрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрднрдЧ 8 рдШрдВрдЯреЗ рд▓рдЧреЗ, рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ, рд░реЗрдлрд╝рд░реЗрдВрд╕ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди, рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдХреЛрдИ рд╡реНрдпрд╡рд╕рд╛рдп рдирд╣реАрдВ рдерд╛ (рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдд), рдФрд░ рдмрд╛рдХреА рд╕рдмред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдХрдо рд╣реИ рдпрд╛ рдереЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдкрд░рд┐рдгрд╛рдо
github.com/vecnas/todomvc-jiant рдкрд░ рд╣реИрдВ ред рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, IE рдореЗрдВ - рд╕рд░реНрд╡рд░ рд╕реЗред
рд╡рд┐рдирд┐рд░реНрджреЗрд╢
github.com/addyosmani/todomvc/wiki/App-Specification - рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВред рдореИрдВ рдпрд╣рд╛рдВ рдкреНрд░рдореБрдЦ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред
рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрди (ToDo) рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рднрдВрдбрд╛рд░рдгред рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░рдг (рдПрдЪрдЯреАрдПрдордПрд▓ 5 рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ред
- рдиреЗрд╡рд┐рдЧреЗрд╢рдиред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣реИрд╢ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдореВрд▓ рджреЗрдЦреЗрдВред рдПрдХ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдкреНрд░рд╛рд░реВрдк рд╡рд╣рд╛рдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рдЗрдВрдЯ рдХрд╛ рдЗрд╕рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдпрд╣ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдиреЛрдбреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рдлрд┐рд░ рдЙрди рдкрд░ рд▓реМрдЯрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдЗрд╕реЗ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдХреЗ рдмрдЯрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреАрди рд░рд╛рдЬреНрдп рд╣реИрдВ: рд╕рднреА рджрд┐рдЦрд╛рдПрдВ, рд╕рдХреНрд░рд┐рдп рджрд┐рдЦрд╛рдПрдВ рдФрд░ рд╢реЛ рдкреВрд░рд╛ рдХрд░реЗрдВ
- рдирдИ рдЪреБрдиреМрддрд┐рдпрд╛рдВред рд╡реЗ рдкреГрд╖реНрда рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рднрд░рдиреЗ рдФрд░ рдПрдВрдЯрд░ рдХреБрдВрдЬреА рджрдмрд╛рдХрд░ рджрд░реНрдЬ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
- рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╣реЗрд░рдлреЗрд░ред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдмрдЯрди рдкреВрд░реНрдг рдпрд╛ рдкреВрд░реНрдг рдирд╣реАрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред рдмрдЯрди рд╕реНрдерд┐рддрд┐ рднреА рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдо рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрдм рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХреЗрддрдХ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- рдЯрд╛рд╕реНрдХред рддреАрди рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рддрддреНрд╡реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ - рдХрд┐рдпрд╛-рдХреНрд▓рд┐рдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рд░реНрдп, рд╣рдЯрд╛рдП рдЧрдП рдХрд╛рд░реНрдп рдмрдЯрди рдФрд░ рдирд╛рдо рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ - рдХрд╛рд░реНрдп рдкрд╛рда рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ
- рдХрд╛ рд╕рдВрдкрд╛рджрдиред рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдЦреБрд▓рддрд╛ рд╣реИ, рд╢реЗрд╖ рддрддреНрд╡ рдЫрд┐рдкреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдПрдВрдЯрд░ рджрдмрд╛рдХрд░ рдпрд╛ рдлреЛрдХрд╕ рдЦреЛ рдХрд░ - рдПрд╕реНрдХреЗрдк рдХреЛ рджрдмрд╛рдХрд░, рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ - рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдпрджрд┐ рд╕реЗрд╡ рдХрд░рддреЗ рд╕рдордп рдЯреЗрдХреНрд╕реНрдЯ рдЦрд╛рд▓реА рд╣реИ - рдХрд╛рд░реНрдп рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ
- рд╕рдХреНрд░рд┐рдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ред рд╡рд░реНрддрдорд╛рди рд╕рдХреНрд░рд┐рдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд╛рда рд╕рд╛рдХреНрд╖рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ("1 рдХрд╛рд░реНрдп", рд▓реЗрдХрд┐рди "2 рдХрд╛рд░реНрдп")
- рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ред рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдп рд╣реЛ
- рдХрд╛рдЙрдВрдЯрд░ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрдЯрди рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдирд▓ рдХреЗрд╡рд▓ рддрднреА рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрд╛рд░реНрдп рд╣реЛ
рдЗрдирдкреБрдЯ рдореЗрдВ, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ HTML рдХреЛрдб рдФрд░ рдХреБрдЫ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рднреА рд╢реИрд▓рд┐рдпрд╛рдБ рдереАрдВред
рдЬрд╛рдЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░
рдлрд┐рд▓рд╣рд╛рд▓, рдЖрджрд░реНрд╢ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдлрд┐рдирд┐рд╢рди рдлрд╛рдЗрд▓ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЬрд╕рди рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛
- "рдЗрдЧреНрдирд┐рд╢рди" рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИ
- "рдкреНрд▓рдЧрдЗрдиреНрд╕" рдХрд╛ рдПрдХ рд╕реЗрдЯ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбрд┐рдЬрд╛рдЗрди
рдЬрд╛рдЗрдВрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдкрд╣рд▓рд╛ рдЪрд░рдг рд╕рдмрд╕реЗ рд╕рд╛рд░ рдбрд┐рдЬрд╛рдЗрди рд╣реИред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрд╕рд╛рдорд╛рдиреНрдп (рдХрдо рд╕реЗ рдХрдо рдЦреБрдж рдХреЗ рд▓рд┐рдП) рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рдореИрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЖрджрд░реНрд╢ рддрд░реНрдХ рдирд╣реАрдВ, рдкрд╣рд▓реЗ рд╡рд┐рдЪрд╛рд░ рдмрддрд╛рддрд╛ рд╣реВрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛрддрд╛ рд╣реИред
рд░рд╛рдЬреНрдпреЛрдВ
рдпрджрд┐ рдЖрдкрдХреЛ рд╣реИрд╢ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рдореЗрдВ рд░рд╛рдЬреНрдп рд╣реЛрдВрдЧреЗред рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд╕реАрдзреЗ рд╕реВрдЪреА рд╕реЗ рд╕реВрдЪреА рд▓реЗрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ:
states: { "": { go: function () {}, start: function(cb) {}, end: function(cb) {} }, active: { go: function () {}, start: function(cb) {}, end: function(cb) {} }, completed: { go: function () {}, start: function(cb) {}, end: function(cb) {} } }
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рдкреНрд░рд╛рд░реВрдк рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рд╡рд░рдг рдЪрд░ рдореЗрдВ рд╕реНрдЯреЗрдЯреНрд╕ рд╕реЗрдХреНрд╢рди рд╣реИ, рддреЛ Jiant рдЗрд╕рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: go, start, endред рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдХреНрд░рдордг, рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдореЗрдВ рд░рд╛рдЬреНрдп рдХреА рд╢реБрд░реБрдЖрдд рдпрд╛ рдЕрдВрдд рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЫреЛрдЯреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
states: { "": {}, active: {}, completed: {} }
рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдИрдбреАрдИ рдореЗрдВ рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдмреЗрд╣рддрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкрд╣рд▓реЗ рдЕрдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рдЦрд╛рд▓реА рд╕реНрдерд┐рддрд┐ "рдЕрдирд┐рд╢реНрдЪрд┐рдд" рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдмрд╕ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣реИрд╢ рдХреЗ рднрд░реА рдЬрд╛рддреА рд╣реИред
рд╡рд╣ рд╕рдм рд╣реИрд╢ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ Jiant рджреНрд╡рд╛рд░рд╛ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
рд░рд╛рдЬреНрдп рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╛рдЬреНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
states: { "": { go: function(showActive, showCompleted) {} } }
рдФрд░ рд╡рд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рд░рд╛рдЬреНрдп рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рддреАрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИред рдлрд┐рд░, рдпрд╣ рдкрд╣рд▓рд╛ рд╕рд╣рдЬ рд╕рдорд╛рдзрд╛рди рд╣реИред рд╡реИрд╕реЗ, рдпреЗ рд░рд╛рдЬреНрдп рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрдиреЗ рд░рд╣реЗред
рдШрдЯрдирд╛рдУрдВ
рдЕрдм рд╣рдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ-рд╕реНрддрд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗ рд╕рд╛рд░рдЧрд░реНрднрд┐рддред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрдЪреА рд╕рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ:
events: { todoAdded: { fire: function(todo) {}, on: function(cb) {} }, todoRemoved: { fire: function(todo) {}, on: function(cb) {} }, todoStateChanged: { fire: function(todo) {}, on: function(cb) {} } }
рдПрдХрдорд╛рддреНрд░ рдШрдЯрдирд╛ рдиреЗ рдЕрдВрддрд┐рдо рдШрдЯрдирд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ рджрд┐рдпрд╛ - рдЪрд╛рд╣реЗ рд╡рд╣ рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ - рдЯреВрдбреВ рдХреЛ рдкреВрд░реНрдг рдпрд╛ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдлрд┐рд░ рд╕реЗ, рд╕рднреА рдШрдЯрдирд╛ рд╕рдорд░реНрдерди рдХреЛрдб рдЬрд╛рдЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рдЕрдореВрд░реНрдд рд╕реВрдЪреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ - рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯред рд╕реАрдмреА рдлрд╝рдВрдХреНрд╢рди (рдХреЙрд▓рдмреИрдХ, рдСрди рдореЗрдердб рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░) рдлрд╛рдпрд░ рдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рд╣реА рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдЕрдм рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рджреГрд╢реНрдп рднрд╛рдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдХреЙрдкреА рдХреА рдЧрдИ рд╣реИред рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж:
views: { main: { batchToggleStateCtl: ctl, newTodoTitleInput: input, todoList: container }, controls: { activeCountLabel: label, clearCompletedCtl: ctl, completedCountLabel: label, showAllCtl: ctl, showActiveCtl: ctl, showCompletedCtl: ctl } },
- рдореИрдВ html рдореЗрдВ рдорд┐рд▓рд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВ, рд╕рдВрд░рдЪрдирд╛ рд╕реЗрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо:
views: { header: { newTodoTitleInput: input }, main: { batchToggleStateCtl: ctl, todoList: container }, footer: { activeCountLabel: label, clearCompletedCtl: ctl, completedCountLabel: label, showAllCtl: ctl, showActiveCtl: ctl, showCompletedCtl: ctl } }
рдФрд░ рдпрд╣ рд╕рдВрд░рдЪрдирд╛, 10 рд╡реЗрдВ рдорд┐рдирдЯ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рдмрджрд▓реАред
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдХ рдЕрддреНрдпрдВрдд рдЧрддрд┐рд╢реАрд▓ рддрддреНрд╡ рджреЗрдЦрддреЗ рд╣реИрдВ - рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЬрд╛рдЗрдВрдЯ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
templates: { tmTodo: { deleteCtl: ctl, editCtl: ctl, stateMarker: label, toggleStateCtl: ctl, titleInput: input, hiddenInEditMode: collection, titleLabel: label } }
рдлрд┐рд░ рд╕реЗ, рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╡рд┐рд╡рд░рдг рд╕реЗ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ "рдХрд╛рд░реНрдп рдмрдЯрди рд╣рдЯрд╛рдПрдВ" - DeleteCtlред
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛рдирд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝реАрд▓реНрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реА рдмрд╛рд░ рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╡реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд▓рдЧреНрди рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: parseTemplate, parseTemplate2Text, рдЬреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ, рдФрд░ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рддрд░реНрдХ рдХрд╛ рд╕реНрдерд╛рдиред рдмрд╛рдж рдореЗрдВ, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдПрдХ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
templates: { .... itemsLeft: {}, itemsLeft1: {} }
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
<div id="itemsLeft1" style="display: none;"> <strong>!!count!!</strong> item left </div> <div id="itemsLeft" style="display: none;"> <strong>!!count!!</strong> items left </div>
рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
tm.parseTemplate2Text({count: count})
рд╣рдо рдЕрднреА рддрдХ рдХрд┐рд╕реА рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдиреАрдЪреЗ рдФрд░ рдЕрдзрд┐рдХред рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ рджреМрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЯреВрдЯрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реНрдЯрд╛рд░реНрдЯрд░
рдЖрджрд░реНрд╢ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЛ app.js рдлрд╝рд╛рдЗрд▓ ("рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдореВрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз") рдореЗрдВ рд░рдЦреЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХрд╛ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
jQuery(function() { jiant.bindUi("", todomvcJiant, true); });
рдЪреВрдВрдХрд┐ html рдХреЛрдб рдкрд╣рд▓реЗ рд╣реА рдЧреНрд░рд╛рд╣рдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ (рдФрд░ рдореИрдВ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддрд╛рдХрд┐ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдмрджрд▓рдирд╛ рди рдкрдбрд╝реЗ), рдЙрдкрд╕рд░реНрдЧ рд░рд┐рдХреНрдд рд╣реИ (рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░), todomvcJiant рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕рдореЗрдВ рджреГрд╢реНрдп, рдЯреЗрдореНрдкрд▓реЗрдЯ, рд╕реНрдерд┐рддрд┐, рдШрдЯрдирд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рдФрд░ рд╣рдо рдореЛрдб рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдХрд╛рд╕ред
HTML рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЦреИрд░, рдпрд╣ рд╕рдм рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдлрд╝рд╛рдЗрд▓ рдФрд░ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИ, рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдХреНрд░реЛрдо рдореЗрдВ html рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦрддрд╛ рд╣реВрдВ:
- Jiant рдХреЗ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ "рдХреЛрдИ рдЗрддрд┐рд╣рд╛рд╕ рдкреНрд▓рдЧрдЗрди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ рдпрд╛ $ .History рдкреНрд▓рдЧрдЗрди ┬╗рдЬреЛрдбрд╝реЗрдВ
- рдЕрд╕рддреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА
- рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреВрд╕рд░реЗ рдЕрд▓рд░реНрдЯ рдХреЗ рдкрд╛рда рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ: рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдИрдбреА рдХреЗ рддрд╣рдд рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдЧреИрд░ рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧреИрд░ рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ, рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рдЕрдкреЗрдХреНрд╖рд┐рдд рдУрдЬ рдЖрдИрдбреА:
рдореИрдВ рдЗрддрд┐рд╣рд╛рд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ - рдпрд╣ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЕрдм рдпрд╣ HTML рд╕реНрддрд░ рдкрд░ рд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
<section id="main"> <input id="toggle-all" class="batchToggleStateCtl" type="checkbox" style="display: none;"> <label for="toggle-all">Mark all as complete</label> <ul id="todo-list" class="todoList"> </ul> </section>
- рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рддрддреНрд╡реЛрдВ рдореЗрдВ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
<div id="tmTodo" style="display: none;"> <li class="stateMarker"> <div class="view hiddenInEditMode"> <input class="toggle toggleStateCtl" type="checkbox"> <label class="editCtl titleLabel"></label> <button class="destroy deleteCtl"></button> </div> <input class="edit titleInput" value=""> </li> </div>
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐, <script type = "someUnreadableTypeToFoolBrowser" рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рд░рдЦрдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, Jiant рд╕рд╣реА html рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ DOM рдореЙрдбрд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдмрдВрдзрди рдХреЛ рдорд╛рдиреНрдп рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдЬрд╛рдЗрдВрдЯ рдиреЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рддрддреНрд╡реЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдмрдВрдж рдХрд░ рджреА, рдЕрдореВрд░реНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЙрдбрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдмрд╛рдзреНрдп рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
рдкреНрд▓рдЧ-рдЗрди
Jiant рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг - рдкреНрд▓рдЧрдЗрдиреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рддрд░реНрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдирдпрд╛ рджреГрд╢реНрдп рдпрд╛ рдИрд╡реЗрдВрдЯ рд╕реНрдерд┐рддрд┐ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдЙрд╕реЗ / рдЙрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ HTML рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрд╢рд╛ рд╕реНрдерд┐рд░ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЫреЛрдЯреЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдЖрджрд░реНрд╢
рд╕рд╡рд╛рд▓ рд╣реИ - рдХреНрдпрд╛ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдХреЗрдВрджреНрд░реАрдХреГрдд рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЕрдкрдирд╛ рдореЙрдбрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ - рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдФрд░ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдХреЛрдб рдорд┐рд▓реЗред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдореЙрдбрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реАрдзреЗ json рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рддрдм рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрд▓рдЧ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗ), рдореЙрдбрд▓ред рдЬреЗрдПрд╕
todomvcJiant.model.todo = (function($, app) { var todos = []; return { add: function(title, completed) { var todo = {title: title, completed: completed ? true : false}; todos.push(todo); app.events.todoAdded.fire(todo); return todo; }, remove: function(todo) { todos = $.grep(todos, function(value) {return value != todo;}); app.events.todoRemoved.fire(todo); return todo; }, getAll: function() { return todos; }, getCompleted: function() { return $.grep(todos, function(value) {return value.completed}); }, getActive: function() { return $.grep(todos, function(value) {return !value.completed}); } } })($, todomvcJiant);
рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рд░рдгреА-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреБрдЫ рдИрд╡реЗрдВрдЯ рд▓реЙрдиреНрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, json рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рдЬреЛрдбрд╝рдирд╛ рдХреЙрд╕реНрдореЗрдЯрд┐рдХ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдБ рдХреЛрдИ getActive () рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ), Jiant рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкреНрд▓рдЧрдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рд╕рдордп, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдврд╝рддреА рд╣реИ, рдмрд╛рдХреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ред рдиреАрдЪреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдХреЛрдб рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ
stateCtls.js
jiant.onUiBound(function($, app) {
footerVisibility.js
jiant.onUiBound(function($, app) { app.events.todoAdded.on(updateView);
рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕рдорд╛рди рд░реВрдк рд╕реЗ onUiBound рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЛ рдирдИ рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рд╛рд░ рдШреЛрд╖рдгрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рдирд┐рдХрд▓рд╛ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ smthChanged рдШрдЯрдирд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдирд┐рдЬреА рд╕рдВрдпреЛрдЧ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ html рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ html рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрдИ рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдпрд╛ рдЯреИрдЧ рдирд╣реАрдВред UI рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реНрдХ jQuery рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред
рдордЬреЗрджрд╛рд░ рддрдереНрдп - рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рд╕рднреА рдХрд╛рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреВрдбреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдпреВрдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЯреВрдбреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЯреЛрдбрд░реЗрдВрдбрд░рд░.рдЬреЗрдПрд╕ рдХреЗ рдЕрдВрджрд░ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдСрд░реНрдбрд░ рдореЙрдбрд▓ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреБрдирд╢реНрдЪ
рдЬрдм рдореИрдВрдиреЗ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрд╛, рддреЛ рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рдЯрд╛рд╕реНрдХ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдирдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рддрдм рддрдХ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреБрдЫ рдореМрдЬреВрджрд╛ рдЗрд╡реЗрдВрдЯреНрд╕ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдИрд╡реЗрдВрдЯ рдЬреЛрдбрд╝рд╛, todoTitleModified, рдЗрд╕реЗ рдирдП рдЯреЗрдХреНрд╕реНрдЯ (todoRenderer.js) рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдбрд┐рдЯрд░ рдореЗрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ рдФрд░ рд╕реЗрд╡ рдореЙрдбреНрдпреВрд▓ (persistence.js) рдореЗрдВ рдИрд╡реЗрдВрдЯ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИред