jWidget - рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб JavaScript MV рдлреНрд░реЗрдорд╡рд░реНрдХ

рдПрдХ рдЕрджреНрднреБрдд рд╕рд╛рдЗрдЯ http://todomvc.com/ рд╣реИ , рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдорд╡реА * ( рдореЙрдбрд▓-рд╡реНрдпреВ- [рдирд┐рдпрдВрддреНрд░рдХ] ) рдЪреМрдЦрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред рдЕрдм рджрд░реНрдЬрдиреЛрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдврд╛рдВрдЪреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдПрдВрдЧреБрд▓рд░ , рдПрдореНрдмрд░ рдФрд░ рдмреИрдХрдмреЛрди рдЬреИрд╕реЗ рджрд┐рдЧреНрдЧрдЬ рд╣реИрдВред рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдореИрдВ рдЕрднреА рднреА рдЕрдкрдиреЗ MV * рдлреНрд░реЗрдорд╡рд░реНрдХ - jWidget рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ ред



рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдЯреЛрдбреЛрдПрдорд╡реАрд╕реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреНрд░рд╕реНрддреБрдд рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрд╛ рдФрд░ jWidget рдХреЗ рд╕рдорд╛рди рдПрдХ рднреА рдврд╛рдВрдЪрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЬрд╛рд╡рд╛, рд╕реА #, рдФрд░ рд╕реА ++ рдореЗрдВ рдЕрддреАрдд рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдмрд╣реБрдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, SOLID рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред рдореБрдЭреЗ рдПрдХ рдРрд╕реА рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдорд╛рдирдХ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рд╡рд┐рд╡рд╢ рдХрд░реЗред рдореИрдВрдиреЗ рдореМрдЬреВрджрд╛ рдЯреЛрдбреЛ рдПрдорд╡реАрд╕реА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рдЬреЛ рджреЗрдЦрд╛ рд╡рд╣ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рдХреБрдЫ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдм рдХреЗ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдЖрдзрд╛рд░, рднрд▓реЗ рд╣реА рдпрд╣ рдореМрдЬреВрдж рд╣реЛ, рд╣рдорд╛рд░реА рдЖрдВрдЦреЛрдВ рд╕реЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред





рдЕрдВрдЧреНрд░реЗрдЬреА рдкреНрд░рд▓реЗрдЦрди: http://enepomnyaschih.github.io/jwidget/index.html#/guide/ome



рд░реВрд╕реА рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди: http://enepomnyaschih.github.io/jwidget/index.html#!/guide/ruhome



рдЧрд┐рдЯрд╣рдм рдкрд░рд┐рдпреЛрдЬрдирд╛: https://github.com/enepomnyaschih/jwidget



рдЯреНрд╡рд┐рдЯрд░: @jwidgetproject



рдЯреЛрдбреЛрдореЗрдХреНрд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди jWidget рдкрд░: http://enepomnyaschih.github.io/todomvc/labs/altecture-examples/jwidget/release/



рд╕реНрд░реЛрдд рд▓рд┐рдВрдХ рдЕрднреА рд╡рд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ jWidget рдХреЗрд╡рд▓ рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рд╣реИред рдиреАрдЪреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╕рд╣реА рд▓рд┐рдВрдХ рд╣реИред



TodoMVC рдХреЗ рд▓рд┐рдП JWidget рд╕реНрд░реЛрдд рдХреЛрдб: https://github.com/enepomnyaschih/todomvc/tree/gh-pages/labs/altecture-examples/jwidget/



рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ jWidget рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ:



1. рдУрдУрдкреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╕рдЦреНрдд рдЕрдиреБрдкрд╛рд▓рдиред рдирдореВрдирд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рджреНрд╡рд┐рднрд╛рд╖реА рд╡рд░реНрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпред

2. рд╕рднреА рдХреЗ рдКрдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрддрд┐ред рдЗрд╕рд▓рд┐рдП, рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рд╕реНрдкрд╖реНрдЯ рдШреЛрд╖рдгрд╛ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдиреНрдпреВрдирддрдо рдЙрдкрдпреЛрдЧ, рдХреНрдпреЛрдВрдХрд┐ Google Chrome рдореЗрдВ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо "рдореЙрдбреНрдпреВрд▓" рдкреИрдЯрд░реНрди (рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд╣рд╛рдБ рдЕрдВрддрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рд░рд╛рд╕рдд рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИ ред

3. рдореЙрдбрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╣реЗрд░рдлреЗрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдкреВрд░реНрдг рдкреБрди: рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╡реЗрджрди рдХреА рдЙрдЪреНрдЪ рдЧрддрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред

4. рдлреНрд░реЗрдорд╡рд░реНрдХ jQuery рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

5. рдЗрд╕рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рд╣реИ рдЬрд┐рд╕реЗ рдлрдВрдХреНрд╢рди рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ https://api.jquery.com/jQuery.parseHTML/ ред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ, рдХреЛрдИ рдЗрдирд▓рд╛рдЗрди рдХреЛрдб рдирд╣реАрдВ: рд╕рднреА рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдШрдЯрдХ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рд╕рдорд╛рди рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рджреГрд╢реНрдп рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрд┐рд╕реА рдореЙрдбрд▓ рдХреЗ рднреАрддрд░ рдпрд╛ рдХрд┐рд╕реА рджреГрд╢реНрдп рдХреЗ рднреАрддрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред

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

7. рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдбрд░, jWidget рдПрд╕рдбреАрдХреЗ , рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЧреНрд░рдВрдЯрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рдвреЗрд░ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВрдиреЗ jWidget, GruntJS рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛ред



рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ jWidget рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рдореИрдВрдиреЗ рдЙрд╕ рд╕рдордп рдХреЛ рдорд╛рдкрд╛, рдЬрд┐рд╕рдореЗрдВ рдЯреЛрдбреЛ рд╡реАрд╡реАрд╕реА рдХреЛ 500 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП 0 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЪреБрдирд┐рдВрджрд╛ рд╕рднреА рдФрд░ рд╕рд╛рдлрд╝ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдордп рдХреЛ рдорд╛рдкрд╛ред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:



  • рдХреЛрдгреАрдп рдЬреЗрдПрд╕ - 16847 рдорд┐рд▓реАрд╕реЗрдХрдВрдбред рд╕рднреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╕рдВрдЪрд╛рд▓рди рддрддреНрдХрд╛рд▓ рд╣реИрдВред
  • рдХреЛрдгреАрдп рдЬреЗрдПрд╕ (рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг) - 13287 рдорд┐рд▓реАрд╕реЗрдХрдВрдбред рд╕рднреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╕рдВрдЪрд╛рд▓рди рддрддреНрдХрд╛рд▓ рд╣реИрдВред
  • рдПрдореНрдмрд░ рдЬреЗрдПрд╕ - 13095 рдорд┐рд▓реАрд╕реЗрдХрдВрдбред рд╕рднреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╕рдВрдЪрд╛рд▓рди рд▓рдЧрднрдЧ 3 рд╕реЗрдХрдВрдб рд▓реЗрдВред
  • рдмреИрдХрдмреЛрди - 9506 рдорд┐рд▓реАрд╕реЗрдХрдВрдбред рд╕рднреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╕рдВрдЪрд╛рд▓рди рд▓рдЧрднрдЧ 3 рд╕реЗрдХрдВрдб рд▓реЗрдВред
  • jWidget - 9974 рдорд┐рд▓реАрд╕реЗрдХрдВрдбред рд╕рднреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╕рдВрдЪрд╛рд▓рди рддрддреНрдХрд╛рд▓ рд╣реИрдВред
  • YUI - рдПрдХ рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХред рдореИрдВрдиреЗ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛




рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдмреИрдХрдмреЛрди рдиреЗ рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ jWidget рдХреЛ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдпрд╣ рдЧрддрд┐ рдореЗрдВ рдкрд┐рдЫрдбрд╝ рдЧрдпрд╛ рдерд╛ рд╕рднреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ 3 рд╕реЗрдХрдВрдб рд╕реЗ рдПрдВрдЧреБрд▓рд░ рдФрд░ рдПрдореНрдмрд░ рдХреА рд╢рд┐рдерд┐рд▓рддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗрдЯрдЯрд╛рдЙрдЯ рдХреЗ рд▓рд┐рдП 500 рдЧреБрдирд╛ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, 3 рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЕрдВрдд рддрдХ рдбреЗрдЯрд╛ рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ, рдЬрдмрдХрд┐ jWidget рд╢реАрд░реНрд╖ рдкрд░ рд╕рд╛рдмрд┐рдд рд╣реБрдЖред




рдЕрдм рдореИрдВ jWidget рдХреЗ рддрдВрддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред рдврд╛рдВрдЪреЗ рдореЗрдВ 5 рдкрд░рддреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:



  1. рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ ред рдХрдХреНрд╖рд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛ рддрдВрддреНрд░ред
  2. рдШрдЯрдирд╛рдПрдБ ред рдШрдЯрдирд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ред рд╕рджрд╕реНрдпрддрд╛, рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рдиреЗ рдФрд░ рдШрдЯрдирд╛ рдкреАрдврд╝реАред
  3. рдЧреБрдг рдФрд░ рдЙрдирдХреЗ рд╕рд╣рд╛рдпрдХ ред рдореМрдЬреВрджрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП рдЧреБрдг рдмрдирд╛рдирд╛ред рд╕рдВрдкрддреНрддрд┐-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧред
  4. рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЙрдирдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди ред рдРрд░реЗ, рд╢рдмреНрджрдХреЛрд╢, рдХрдИред рдореМрдЬреВрджрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рд╕рдВрдЧреНрд░рд╣-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧред
  5. рдЕрд╡рдпрд╡ ред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ред рдШрдЯрдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдВрдмрдВрдзред рдЧреБрдг рдФрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдмрдирд╛рдирд╛ред




1. рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВред





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



//  . var Hand = function(side) { //    . Hand._super.call(this); //  . this.side = side; //    ,     . //  ,         . this.grabbedObject = null; }; //  Hand  JW.Class. JW.extend(Hand, JW.Class, { //    ,   . // String side; // Grabbable grabbedObject; //  . grab: function(obj) { this.grabbedObject = obj; }, //    . destroy: function() { console.log("Destroying " + this.side + " hand"); //         _super. this._super(); } });
      
      







JW.Class рдХреА рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдПрдХрддреНрд░реАрдХрд░рдг рддрдВрддреНрд░ рд╣реИ, рдЬреЛ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдбрд┐рдЬрд╛рдЗрди рдХреА рдкреБрд╕реНрддрдХ рдЯреНрд░рд┐рдХреНрд╕ рд╕реЗ рдкрд░рд┐рдЪрдп рд╕реЗ рдорд┐рд▓рд╛ ред рдЪрд╛рд░ рдХреЗ рдЧрд┐рд░реЛрд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди ред рдпрд╣ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреЙрдЗрдВрдЯрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдПрдХрддреНрд░реАрдХрд░рдг рдФрд░ рдЬрд╛рдЧрд░реВрдХрддрд╛ред рдЬрд╛рдЧрд░реВрдХрддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬреЛ рд╡рд╕реНрддреБ рд╕реВрдЪрдХ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ, рд╡рд╣ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд╕реНрддреБ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдЙрд╕рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХреЗ рдкрд╛рд╕ рд▓рд┐рдВрдХ рд╣реИ, рд╡рд╣ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд╣ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдХреБрд▓ рд╡рд╕реНрддреБ рдЬреАрд╡рд┐рдд рд░рд╣рддреА рд╣реИ рдЬрдмрдХрд┐ рдорд╛рд▓рд┐рдХ рд╡рд╕реНрддреБ рдЬреАрд╡рд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЗ рд╣реИрдВред



JWidget рдореЗрдВ, JW.Class рд╡рд░реНрдЧ рдХреА рд╕реНрд╡рдпрдВ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХрддреНрд░реАрдХрд░рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ A рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ B рдХреЗ рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░, рдЖрдкрдиреЗ рдСрдмреНрдЬреЗрдХреНрдЯ A рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ B рдХрд╛ рд╕реНрд╡рд╛рдореА рдмрдирд╛ рджрд┐рдпрд╛ред рдЬрдм рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ A рдХреЛ рдирд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ B рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдпрдВ рдХреА рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдмреА рд▓реМрдЯрд╛рддреА рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред



 var Soldier = function() { Soldier._super.call(this); //   .  -   , //   . this.leftHand = this.own(new Hand("left")); this.rightHand = this.own(new Hand("right")); }; JW.extend(Soldier, JW.Class, { // Hand leftHand; // Hand rightHand; destroy: function() { console.log("Destroying soldier"); this._super(); } });
      
      







рдЕрдм рд╣рдо рдПрдХ рд╕реИрдирд┐рдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдХрд░ рдирд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



 var soldier = new Soldier(); soldier.destroy();
      
      







рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рджреЗрдЦреЗрдВрдЧреЗ:



 рд╕реИрдирд┐рдХ рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛
 рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛
 рдмрд╛рдПрдВ рд╣рд╛рде рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛




рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдПрдХ рд╕реИрдирд┐рдХ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рд╣рд╛рде рдЕрдкрдиреЗ рдЖрдк рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЛрд▓реНрдЬрд░ рдХреНрд▓рд╛рд╕ рдХреА рд╡рд┐рдзреНрд╡рдВрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рд╛рдереЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХрддреНрд░реАрдХрд░рдг рд╣рдореЗрдВ рдХрдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ, рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдмрд╣реБрдд рдХрдо рд╣реА рдУрд╡рд░рд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдЯреВрдбреЛрдПрдорд╡реАрд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдмрд╛рд░ рднреА рдЕрддрд┐рднрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ - рд╕рдм рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рдПрдХ рддрдВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



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



2. рдШрдЯрдирд╛рдПрдБред





рдЗрд╡реЗрдВрдЯреНрд╕ рдХрд┐рд╕реА рднреА MV * рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВред рдпрджрд┐ рджреГрд╢реНрдп рдХрд╛ рдореЙрдбрд▓ рддрдХ рд╕реАрдзреА рдкрд╣реБрдВрдЪ рд╣реИ, рддреЛ рдореЙрдбрд▓ рджреГрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдлреАрдбрдмреИрдХ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдорд╛рдирдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШрдЯрдирд╛рдУрдВ, рдЬреИрд╕реЗ рдХрд┐ рдХреНрд▓рд┐рдХ , рдореВрд╕рдбрд╛рдЙрди рдпрд╛ рдХреАрдкреНрд╕ рд╕реЗ рдирд╣реАрдВ рд╣реИ , рд▓реЗрдХрд┐рди "рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдирд╛рдо рдмрджрд▓ рдЧрдпрд╛ рд╣реИ" , "рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ" , "рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝" рджрд┐рдирд╛рдВрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рд╣реИрдВ ред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдирдХ рдЯреВрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред



рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, jWidget рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЧрддрд┐ рд╕рднреА рд╕реЗ рдКрдкрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдорд╛рдирдХ рдШрдЯрдирд╛ рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛, рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, jQuery рдореЗрдВ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред



 $("#document").bind("click", onClick); $("#document").unbind("click", onClick);
      
      







рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдШрдЯрдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рд░реИрдЦрд┐рдХ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ (рд╕рдВрдкреВрд░реНрдг рдЦреЛрдЬ) рд╣реИред рдореИрдВ рдПрдХ рдРрд╕реА рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдирд╛ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рдЙрд╕ рдХреБрдВрдЬреА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╢рдмреНрджрдХреЛрд╖ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдмрд╣реБрдд рддреЗрдЬ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, jWidget рдЗрд╡реЗрдВрдЯ рдпреЛрдЬрдирд╛ OOP рдХреЗ рд╕рднреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рддреА рд╣реИред



 var Document = function(title) { Document._super.call(this); this.title = title; //   . this.titleChangeEvent = this.own(new JW.Event()); }; JW.extend(Document, JW.Class, { // String title; // JW.Event titleChangeEvent; setTitle: function(title) { if (this.title === title) { return; } this.title = title; //  . this.titleChangeEvent.trigger(new JW.ValueEventParams(this, title)); } }); var Client = function(document) { Client._super.call(this); this.document = document; //   .  ,     //     . this.own(document.titleChangeEvent.bind(this._onTitleChange, this)); }; JW.extend(Client, JW.Class, { // Document document; _onTitleChange: function(params) { console.log("Changed title to " + params.value); } }); //  . var doc = new Document("apple"); var client = new Client(doc); doc.setTitle("banana"); // : Changed title to banana doc.setTitle("cherry"); // : Changed title to cherry //    ,  . client.destroy(); doc.destroy();
      
      







рдШрдЯрдирд╛ рдХреЛ JW.Event рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдИрд╡реЗрдВрдЯ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ JW.EventAttachment рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдВрдб рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ рдПрдХ рдШрдЯрдирд╛ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЬрдм рд╣рдо рдЯреНрд░рд┐рдЧрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо JW.EventParams рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред



3. рдЧреБрдг рдФрд░ рдЙрдирдХреЗ рд╕рд╣рд╛рдпрдХ





рдпрджрд┐ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд MV * рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред jWidget рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрди рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд╕реНрддреБрдПрдВ рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлреЗрдВрдХрддреА рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:







рдореИрдВ рдЕрдЧрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ (рд╕рд░рдгреА, рдорд╛рдирдЪрд┐рддреНрд░, рд╕реЗрдЯ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдм рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ ( JW.Property ) рдХреНрдпрд╛ рд╣реИред рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдПрдХ "рдЪрд░" рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдореВрд▓реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕:







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



рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡рд░реНрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЕрдкреНрд░рд╛рдкреНрдп рд╣реИ, рдпрд╣ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдорд╛рдг рдХреЗ рдПрдХ рдЖрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдЖрд╡реЗрджрди рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рджреВрд╕рд░реЗ рдХреА рдирдХрд▓ рдХрд░рдХреЗ рджреЛ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:



 var source = new JW.Property("apple"); var target = new JW.Property(); new JW.Copier(source, {target: target}); assertEqual("apple", target.get()); source.set("banana"); assertEqual("banana", target.get());
      
      







рдмрд╛рдЗрдВрдбрдЯреЛ рд╡рд┐рдзрд┐ рд╡рд╣реА рдХрд░рддреА рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рдХреНрд╖рд┐рдд рд╕рдВрдкрддреНрддрд┐ рднреА рдЗрд╕рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлреЗрдВрдХрддреА рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЬрд┐рддрдиреА рдЪрд╛рд╣реЗрдВ рдЙрддрдиреЗ рдЧреБрдг рдЬреЛрдбрд╝ рд╕рдХреЗрдВ:



 var source = new JW.Property("apple"); var target1 = new JW.Property(); target1.bindTo(source); var target2 = new JW.Property(); target2.bindTo(target1); source.set("banana"); assertEqual("banana", target2.get());
      
      







рдордХреНрдЦреА рдкрд░ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рдирдХрд▓ рдХреЗрд╡рд▓ рд╢реБрд░реБрдЖрдд рд╣реИред рдЖрдЗрдП рд╕реВрддреНрд░ text = value + " " + unit



рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рдореМрдЬреВрджрд╛ рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдИ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:



 var value = new JW.Property(1000); var unit = new JW.Property("MW"); var functor = new JW.Functor([ value, unit ], function(value, unit) { return value + " " + unit; }, this); var target = functor.target; assertEqual("1000 MW", target.get()); value.set(1500); assertEqual("1500 MW", target.get()); unit.set(""); //    assertEqual("1500 ", target.get());
      
      







рдЕрдВрдд рдореЗрдВ, рдирд┐рд░реНрдорд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдХреБрдЫ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдкрд╛рда рдХреЛ рдмрд╛рдВрдзреЗрдВ:



 new JW.UI.TextUpdater("#capacity", target);
      
      







рдЕрдм рдорд╛рди рдФрд░ рдЗрдХрд╛рдИ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, #capacity рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдкрд╛рда рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред



рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ JW.Property рд╡рд░реНрдЧ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦреЗрдВред



jWidget рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ HTML рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╡реЗрджрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдмрд░рджрд╕реНрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗрд╡рд▓ рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рдХреЗ рдмреАрдЪ рдХреА рдкрд░рдд рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдХреЗ рднреАрддрд░ рдФрд░ рдПрдХ рджреГрд╢реНрдп рдХреЗ рднреАрддрд░ рдЧреБрдгреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ, рдФрд░ рдЖрдк рдЦреБрдж рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрдпрд╛ рд╕рдВрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЖрдк рдЖрд╡реЗрджрди рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдБ рд╕реЗ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ HTML рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЧрддрд┐ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред



рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕реНрд╡рдпрдВ рд╡реЗрд▓реНрдпреВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



4. рд╕рдВрдЧреНрд░рд╣ рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ





jWidget рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕реЗ 3 рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ: JW.AbstractArray , JW.AbstractMap рдФрд░ JW.AbstractSet ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рджреЗрд╢реА рдРрд░реЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - jwidget рд╕рдВрдЧреНрд░рд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рджреЗрд╢реА рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ jwidget рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ - рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдХ рдФрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА:



- JW.AbstractArray : JW.Array рдФрд░ JW.ObservableArray

- JW.AbstractMap : JW.Map рдФрд░ JW.ObservableMap

- JW.AbstractSet : JW.Set рдФрд░ JW.ObservableSet



рд╕рд░рд▓ рд╕рдВрдЧреНрд░рд╣ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝реА рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЙрдирдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░рд▓ рд╕рдВрдЧреНрд░рд╣ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдорд╛рди рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рдРрд░реЗ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреВрдВрдЧрд╛:



 // @param {JW.AbstractArray} documents function createDocumentViews(documents) { return documents.$map(function(document) { return new DocumentView(document); }, this); }
      
      







рдРрд╕рд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдмрд╕ JW.Array рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдФрд░ рджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЖрдмрд╛рдж рдХрд┐рдпрд╛ред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдВрдмрдВрдз рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд░рдгреА рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рд╕рд░рдгреА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред JWidget рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝рд░ рдмрдирд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдПрдХ рдореИрдкрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



 function createDocumentViews(documents) { return documents.createMapper({ createItem: function(document) { return new DocumentView(document); }, destroyItem: function(documentView) { documentView.destroy(); }, scope: this }).target; }
      
      







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



 var DocumentList = function(documents) { DocumentList._super.call(this); this.documentViews = this.createDocumentViews(documents); }; JW.extend(DocumentList, JW.Class, { createDocumentViews: function(documents) { return this.own(documents.createMapper({ createItem: function(document) { return new DocumentView(document); }, destroyItem: function(documentView) { documentView.destroy(); }, scope: this })).target; } });
      
      







рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЛрд╖реНрдардХ рдХреИрд╕реЗ рдЦрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо рдмрд┐рд▓реНрдХреБрд▓ рдореИрдкрд░ рдХреЛ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдареАрдХ рдЙрд╕рдХреЗ рд▓рдХреНрд╖реНрдп рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВред



CreateMapper рдореЗрдердб JW.Array рдФрд░ JW.ObservableArray рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдирд┐рд░рдВрддрд░ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ JW.Array рдХрд┐рд╕реА рднреА рдШрдЯрдирд╛ рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрдк рдХрд┐рд╕реА рднреА рд╕рдордп JW.ObservableArray рдХреЗ рд╕рд╛рде JW.Array рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд┐рд▓реНрдХреБрд▓ рдмрд╣реБрд░реВрдкреА рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



jWidget рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝рд░ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреВрд░реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВред



рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



5. рдЕрд╡рдпрд╡





рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЧрдПред jWidget рд╕рднреА рдкреНрд░рд╕реНрддреБрддрд┐ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ JW.UI.Component рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рд╡рд░реНрдЧ рдХрд╛ рдЕрдкрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд╛рджрд╛ HTML рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 2 рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВ : jwclass рдФрд░ jwid ред рдЯреЗрдореНрдкрд▓реЗрдЯ JW.UI.template рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИред



 var MyComponent = function(message, link) { MyComponent._super.call(this); this.message = message; this.link = link; }; JW.extend(MyComponent, JW.UI.Component, { // String message; // String link; renderComponent: function() { this._super(); this.getElement("hello-message").text(this.message); this.getElement("link").attr("href", this.link); } }); JW.UI.template(MyComponent, { main: '<div jwclass="my-component">' + '<div jwid="hello-message" />' + '<a href="#" jwid="link">Click me!</a>' + '</div>' });
      
      







Jwclass рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗрд╡рд▓ рдПрдХ рдШрдЯрдХ рдХреЗ рдореВрд▓ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИ, рдФрд░ рдпрд╣ CSS рддрддреНрд╡ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реИред рдЗрд╕ рддрддреНрд╡ рдХреЗ CSS рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП jwid рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рдкреНрд░рддреНрдпрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд HTML рддрдХ рд╡рд┐рд╕реНрддреГрдд рд╣реИ:



 <div class="my-component"> <div class="my-component-hello-message" /> <a href="#" class="my-component-link">Click me!</a> </div>
      
      







DOM рдореЗрдВ рдПрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



 var component = new MyComponent("Hello, Wanderer!", "http://google.com"); component.renderTo("body");
      
      







рдШрдЯрдХ рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдЯрдИрдореЗрдВрдЯ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕рдХреЗ jwid рджреНрд╡рд╛рд░рд╛ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ jQuery рдЖрд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд░реЗрдВрдбрд░рдХрдВрдкреЛрдиреЗрдВрдЯ рд╡рд┐рдзрд┐ рдПрдХ рдШрдЯрдХ рдЬреАрд╡рди рдЪрдХреНрд░ рд╡рд┐рдзрд┐ рд╣реИред рдЗрд╕реЗ рдУрд╡рд░рд▓реЛрдб рдХрд░рдХреЗ, рдЖрдк рдПрдХ рдШрдЯрдХ рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рд▓ рдШрдЯрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдмрд╛рд▓ рдШрдЯрдХ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:



  1. рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдмрд╛рд▓ рдШрдЯрдХ
  2. рдЖрд╕рд╛рди рдмрджрд▓реА рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ
  3. рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреА рд╕рд░рдгрд┐рдпрд╛рдБ




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



 var Application = function() { Application._super.call(this); }; JW.extend(Application, JW.UI.Component, { renderComponent: function() { this._super(); this.children.set(this.own(new Header()), "header"); this.children.set(this.own(new Content()), "content"); } }); JW.UI.template(Application, { main: '<div jwclass="application">' + '<div jwid="header" />' + '<div jwid="content" />' + '</div>' });
      
      







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



рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рд▓ рдШрдЯрдХ рдирд╛рдорд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди JW.Property рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ addReplaceable рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ JW.Mapper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ :



 var Application = function(selectedDocument) { Application._super.call(this); this.selectedDocument = selectedDocument; }; JW.extend(Application, JW.UI.Component, { // JW.Property selectedDocument; renderComponent: function() { this._super(); var documentView = this.own(new JW.Mapper([ this.selectedDocument ], { createValue: function(document) { return new DocumentView(document); }, destroyValue: function(documentView) { documentView.destroy(); }, scope: this })).target; this.addReplaceable(documentView, "document"); } }); JW.UI.template(Application, { main: '<div jwclass="application">' + '<div jwid="document" />' + '</div>' });
      
      







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



рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреА рд╕рд╛рд░рдгрд┐рдпрд╛рдБ JW.AbstractArray рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ AddArray рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рд░рдгреА JW.ObservableArray рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдХреЗ рдирд┐рд░рдВрддрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧреАред рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреА рд╕рд╛рд░рдгреА рдЖрд╕рд╛рдиреА рд╕реЗ createMapper рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ:



 var Application = function(documents) { Application._super.call(this); this.documents = documents; }; JW.extend(Application, JW.UI.Component, { // JW.AbstractArray documents; renderComponent: function() { this._super(); var documentViews = this.own(this.documents.createMapper({ createItem: function(document) { return new DocumentView(document); }, destroyItem: function(documentView) { documentView.destroy(); }, scope: this })).target; this.addArray(documentViews, "documents"); } }); JW.UI.template(Application, { main: '<div jwclass="application">' + '<div jwid="documents" />' + '</div>' });
      
      







рдирд╛рдорд┐рдд рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рд╕рд░рдгреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рддреЛ, рдЖрдк AddArray рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЛ рдЫреЛрдбрд╝ рдХрд░ рд╕реАрдзреЗ рдШрдЯрдХ рдХреЗ рдореВрд▓ рддрддреНрд╡ рдореЗрдВ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред



рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, jWidget рдЖрдкрдХреЛ рд░реЗрдВрдбрд░рдЪрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЪрд╛рдЗрд▓реНрдбрдЖрдИрдб рддрддреНрд╡ рдХреА рдЬреЗрд╡реАрдбреА рд╣реИ, рдЬрд┐рд╕реЗ рдХреИрдорд▓рдХреЗрдЬрд╝ рдореЗрдВ рдХреИрдкрд┐рдЯрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рддрддреНрд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред рдиреАрдЪреЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рджреА рдЧрдИ рд╣реИрдВ:



 var Application = function(title, documents, selectedDocument) { Application._super.call(this); this.title = title; this.documents = documents; this.selectedDocument = selectedDocument; }; JW.extend(Application, JW.UI.Component, { // JW.Property<String> title; // JW.AbstractArray<Document> documents; // JW.Property<Document> selectedDocument; //     ,       . renderTitle: function(el) { this.own(new JW.UI.TextUpdater(el, this.title)); }, //    JW.UI.Component,     . renderHeader: function() { return this.own(new Header()); }, //    JW.AbstractArray,     . renderDocumentList: function() { return this.own(this.documents.createMapper({ createItem: function(document) { return new DocumentListItem(document); }, destroyItem: JW.destroy, //  scope: this })).target; }, //    JW.Property,      . renderSelectedDocument: function() { return this.own(new JW.Mapper([ this.selectedDocument ], { createValue: function(document) { return new DocumentPanel(document); }, destroyValue: JW.destroy, //  scope: this })).target; }, //    false,       DOM renderHappyNewYear: function() { return new Date().getMonth() === 0; } }); JW.UI.template(Application, { main: '<div jwclass="application">' + '<div jwid="title" />' + '<div jwid="header" />' + '<div jwid="document-list" />' + '<div jwid="selected-document" />' + '<div jwid="happy-new-year">Happy new year!</div>' + '</div>' });
      
      







рдШрдЯрдХ рдХреЗ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ jWidget рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрд▓рдЧ HTML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧрд╛рдЗрдб рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред рдпрджрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЧреНрд░рдВрдЯрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ jwidget SDK рдХреА рдЬрдЧрд╣ рд▓реЗрдЧрд╛ред рдореИрдВрдиреЗ jWidget рдПрд╕рдбреАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрд╣реБрдд рд╕рдорд░реНрдерди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдФрд░ рдЕрдм рд╕рдорддреБрд▓реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЧреНрд░рдВрдЯрдЬрдПрд╕ рджрд┐рдЦрд╛рдИ рджреА рд╣реИ, рдЬрд┐рд╕рдиреЗ рддреБрд░рдВрдд рднрд╛рд░реА рд╕рдорд░реНрдерди рдкрд╛рдпрд╛ рдФрд░ рдПрдХ рд╕рдореБрджрд╛рдп рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ jWidget рдПрд╕рдбреАрдХреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдХрдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред



рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореЗрдВ рд╡реЗ рднреА рд╣реИрдВ рдЬреЛ рдореЗрд░реА рддрд░рд╣ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рд╣реИрдВ рдФрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЙрдЪреНрдЪ рдЧрддрд┐ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдЖрдк рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ jwidget рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЖрдк рдирд┐рд░рд╛рд╢ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдорд╡реА * рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдПрдХ рдмрдбрд╝реА рд░рд╛рд╢рд┐ рдХреЗ рд╕рд╛рде, рдореИрдВ рдЕрднреА рднреА jWidget рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдкреНрд░рд▓реЗрдЦрди, рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рддрдВрдЧ рдХрд╡рд░реЗрдЬ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдкрд░ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЖрдЧреЗ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ, рддреЛ GitHub рдкрд░ рддрд╛рд░рд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рди рд╣реЛрдВ рдФрд░ рдЯреНрд╡рд┐рдЯрд░ @jwidgetproject рдкрд░ рдореЗрд░рд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЕрдЪреНрдЫреЗ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж




All Articles