рд▓реЗрдЦ рдкреБрд░рд╛рдирд╛ рд╣реИред рдирдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред BindNode рдФрд░ рдкрд░ рджреЗрдЦреЗрдВредрд╣рдорд░ рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдФрд░ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдмрдзрд╛рдИред
рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рд╕рдВрд░рдЪрд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореИрддреНрд░рд┐рдХреЛрд╕реНрдХрд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬрд╛рджреВ рд╕рдиреНрдирд┐рд╣рд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб:
mk.on( 'change:x', function() { alert( 'x is changed to ' + this.x ); }); mk.x = 2;
рдФрд░ рдпрд╣ ... IE8 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣реИ рдореИрдЯреНрд░реАрд╢реЛрдХрд╛?
рдПрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрддреНрд░рд┐рдпреЛрд╢реНрдХрд╛рдХреЙрдореНрдкреИрдХреНрдЯ рдЖрдХрд╛рд░ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕реЗ рдмрдбрд╝реЗ, рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдиреЗ рдЖрдЬ рдХрд┐рд╕реА рдХреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред
рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдореИрддреНрд░рд┐рдпреЛрд╢реНрдХрд╛рдпрджрд┐ рдЖрдк Matryoshka рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдореИрдЯреНрд░рд┐рдпреЛрд╢реНрдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдкрдиреА рдЦреБрдж рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ MatryoshkaMatryoshka рдПрдХ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬреЛ MVC, MVVM рдпрд╛% your_design_pattern% рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдЬреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╡рд╛рдВрдЫрд┐рдд рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рдХреНрдпреЛрдВ?
рдореИрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдердХ рдЧрдпрд╛ рд╣реВрдВред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХреА рд╕рднреА рдмреИрдЪреЗрдиреА рдореБрдЭрдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЬрдиреНрдо рджреЗрддреА рд╣реИ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рдХреНрд╖реНрдпрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЗрдЯреНрд░реАрд╢реЛрдХрд╛ рдХрд╛ рдорд╣рддреНрд╡рд╛рдХрд╛рдВрдХреНрд╖реА рд▓рдХреНрд╖реНрдп рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЬрд╛рдирд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдпреВрдЖрдИ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рдХрд╛рд░реНрдп 100% рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдХреЛрдб рдХреНрд▓реАрдирд░, рдХрдо рдФрд░ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рджрд┐рдП рдЧрдП рдЯреВрд▓ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдирд┐рдЪреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рд╣рд┐рд▓рд╛ рджреЗрдиреЗ рдФрд░ рдмреБрд░рд╛рдИ рдмрдирдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ
рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рдорд╕реНрдпрд╛: рдбреЗрдЯрд╛ рд╣реИ:
var o = { x: 2 };
рдПрдХ
select
рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
<select> <option>1</option> <option>2</option> <option>3</option> <select>
рдпрджрд┐ рдЖрдк рд╢реБрджреНрдз JS + jQuery рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреБрдЫ рд▓рд┐рдЦреЗрдВрдЧреЗ:
$( 'select' ).on( 'change', function() { ox = +this.value; });
рдлрд┐рд░, рдЬрдм рд╣рдо рдбреЗрдЯрд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
ox = 1; $( 'select' ).val( ox );
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ "рдкрд░рдорд╛рдгреБрдУрдВ" рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ: рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдПрдХ рддрддреНрд╡ред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдмреИрдХрдмреЛрди (рдПрдорд╡реАрд╕реА) рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдХ рдореЙрдбрд▓ (рдореЙрдбрд▓, рд╕рдВрдЧреНрд░рд╣), рдкреНрд░рд╕реНрддреБрддрд┐ (рдПрдЪрдЯреАрдПрдордПрд▓ рдХреЛрдб) рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ (рджреЗрдЦреЗрдВ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рдиреЙрдХрдЖрдЙрдЯ рдФрд░ рдПрдВрдЧреБрд▓рд░ (рдПрдорд╡реАрд╡реАрдПрдо) рдПрдХ рдЕрднреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ рдЬреЛ .NET рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡реЗрдм рдкрд░ рдЬрд╛рддрд╛ рд╣реИ: рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдЬрдЧрд╣ рддрд░реНрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ ViewModel) HTML рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рд╡рд┐рд╡рд░рдг рдЧрд▓рдд рд╣реИ рддреЛ рдореИрдВ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ)ред рдРрд╕реЗ рдврд╛рдВрдЪреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрдХрдбрд╝ рдирд╣реАрдВ рд╕рдХрддреЗред
Matryoshka рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИ рдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ HTML рдХреЛрдб (MVVM рдХреЗ рд╡рд┐рдкрд░реАрдд) рдХреЛ рдирд╣реАрдВ рдЫреВрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореЙрдбрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП HTML (рдмреИрдХрдмреЛрди рдХреЗ рд╡рд┐рдкрд░реАрдд) рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
var mk = new Matreshka;
рдпрджрд┐ рд╣рдо рдбреЗрдЯрд╛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
mk.x = 2;
рдРрд╕рд╛ рдХреЛрдб рди рдХреЗрд╡рд▓ рдПрдХ рдПрдХреНрд╕ рдХреЛ рдПрдХ рдбреНрдпреВрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдЧрд╛, рдмрд▓реНрдХрд┐
.value = 2
рд╕реЗрдЯ рдХрд░рдХреЗ рдЪрдпрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рдмрджрд▓
.value = 2
ред
рдФрд░ рдпрд╣
.set
рдЬреИрд╕реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╣реИред
jsbin.com/jikewipi/2/editрдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ?
mk.bindNode( 'x', 'select' ... )
bindNode
рд╡рд┐рдзрд┐, рд╡рд┐рдЪрд┐рддреНрд░ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рддрддреНрд╡ рдХреЛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╡рд╕реНрддреБ рдХреА рдХреБрдВрдЬреА рд╣реИ, рджреВрд╕рд░рд╛ рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
'select'
ред рджреВрд╕рд░реЗ рддрд░реНрдХ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЛ jQuery рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЪрдпрдирдХрд░реНрддрд╛, рд╢реБрджреНрдз рддрддреНрд╡, jQuery рд╡рд╕реНрддреБ, NodeList, рддрддреНрд╡реЛрдВ рдХреА рд╕рд░рдгреА ... рдЕрд░реНрдерд╛рдд,
'select'
рдХреЛ
$( 'select' )
рдпрд╛
document.getElementsByTagName( 'select' )
рдпрд╛
document.querySelector( 'select' )
рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
document.querySelector( 'select' )
ред
рддреАрд╕рд░рд╛ рддрд░реНрдХ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╣рдо рдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
on: 'change'
рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ: "рддрддреНрд╡ рдкрд░ рдХреНрдпрд╛ рдШрдЯрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рдо рддрддреНрд╡ рд╕реЗ рдореВрд▓реНрдп рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВ?"
getValue: function() { return this.value; }
рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ: "рдХрд┐рд╕реА рддрддреНрд╡ рдХрд╛ рдорд╛рди рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓реЗрдВ?", рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реБрдПред
setValue: function( v ) { this.value = v; }
рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ: "рд╣рдо рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреИрд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ?",
v
рдХрд╣рд╛рдБ рдореВрд▓реНрдп рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
2
)ред
рдбреЙрдХ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ:
finom.imtqy.com/matreshka/docs/Matreshka.html#bindificationрдЖрдЗрдП рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ jQuery UI рд╕реЗ рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд░ рд╣реИ:
api.jqueryui.com/slider рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реЗ рдмрд╛рдВрдзрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдерд╛ред рд╣рдо рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░
"slide"
рдШрдЯрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рдШрд╕реАрдЯрд╛ рдЬрд╛рдиреЗ рдкрд░ рдЖрдЧ рд▓рдЧрддреА рд╣реИред
рдкрд╣рд▓реЗ, рдмрдВрдзрди рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
<div class="slider"></div>
$( ".slider" ).slider({ min: 0, max: 100 });
рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рдорд╛рддреГрд╢реЛрдХрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ:
var mk = new Matreshka();
рддрдм рд╣рдо рдмрдВрдзрди рдХрд╣рддреЗ рд╣реИрдВ:
mk.bindNode( 'x', '.slider', { on: 'slide',
рдЕрдм рдЬрдм рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╣рддреЗ рд╣реИрдВ ...
mk.x = 44;
... рд╕реНрд▓рд╛рдЗрдбрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреАред
рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрдм рд╣рдо рд╕реНрд▓рд╛рдЗрдбрд░ рд╣реИрдВрдбрд▓ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛
mk.x
рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
UPD : рд╕рдВрд╕реНрдХрд░рдг 0.2 рд╕реЗ рд╢реБрд░реВ, рддреАрд╕рд░реЗ рддрд░реНрдХ рдореЗрдВ рдПрдХ рдирдИ рдХреБрдВрдЬреА
'initialize'
, рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рдмрд╛рдБрдзрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
0.2 рдкрд░ рд▓реЗрдЦ рджреЗрдЦреЗрдВ ред рдХреЛрдб рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
mk.bindNode( 'x', '.slider', { initialize: function() { $( this ).slider({ min: 0, max: 100 }); }, on: 'slide', getValue: function() { return $( this ).slider( 'option', 'value' ); }, setValue: function( v ) { $( this ).slider( 'option', 'value', v ); } });
рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ HTML рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рд░реНрдп рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ:
<div class="output">Value is <span class="x"></span></div>
рдФрд░ рдЗрд╕реЗ
'x'
рд╕реЗ рдмрд╛рдВрдзреЗрдВ:
mk.bindNode( 'x', '.output .x', { setValue: function( v ) { this.innerHTML = v; } });
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрддреНрд╡ рдХреЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ
"on"
рд╕рдВрдкрддреНрддрд┐ рдФрд░
"getValue"
рд╡рд┐рдзрд┐ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо
".output .x"
рддрддреНрд╡ рд╕реЗ рдорд╛рди рдирд╣реАрдВ
".output .x"
, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВред
рд╣рдо рдХрдИ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрд╛рдВрдз рд╕рдХрддреЗ рд╣реИрдВред рд░реВрдкрд╛рдВрддрд░рдг рднреА рд╕рддреНрдп рд╣реИ: рд╣рдо рдХрдИ рдЧреБрдгреЛрдВ рдХреЛ рдПрдХ рддрддреНрд╡ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ "рдХрдИ рд╕реЗ рдХрдИ" рдирд┐рдпрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореИрдЯреНрд░реАрд╢реЙрдХрд╛ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рдкрд░рд┐рдгрд╛рдо:
jsbin.com/bulobuhu/7/edit (рдХрдВрд╕реЛрд▓ рдЯреИрдм рдЦреЛрд▓реЗрдВ рдФрд░
x
рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
mk.x = 42;
рд▓рд┐рдЦреЗрдВ
mk.x = 42;
)
рдорд╣рд╛рди, рд╣рдордиреЗ рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдзреНрдп рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдирд┐рд░рд░реНрдердХ рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдорд┐рд▓рд╛ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ)ред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реНрд▓рд╛рдЗрдбрд░ рд╣реИрдВ? рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдБ ...
mk.bindNode( property, element, { on: 'slide', getValue: function() { return $( this ).slider( 'option', 'value' ); }, setValue: function( v ) { $( this ).slider( 'option', 'value', v ); } });
... рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдХрд░реЗрдВ? рддрддреНрд╡реЛрдВ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдВрдзрддреЗ рд╕рдордп рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдПрдЧреАред рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛:
mk.bindNode( 'x', '.slider' );
рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? Matryoshka рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐
MK.elementProcessors
MK.defaultBinders
(рдмрджрд▓рд╛ рд╣реБрдЖ) рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рдлрд╝рдВрдХреНрд╢рдВрд╕ рддрд░реНрдХ
el
рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛ рд░рд╣реА рддрддреНрд╡ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдпрд╣ рд╢рд░реНрдд рд╢рд╛рдорд┐рд▓ рд╣реИ: рдпрджрд┐ рддрддреНрд╡ рдХреБрдЫ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡рд┐рдХрд▓реНрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ
.bindNode
рд╣реИрдВ, рдЬреЛ рдКрдкрд░
.bindNode
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рддреАрд╕рд░рд╛ рддрд░реНрдХ рд╣реИред
рдХрд┐рд╕реА рднреА рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рд╣реИ: рд╕рднреА рдХреЗ рдкрд╛рд╕ рдПрдХ
ui-slider
рд╡рд░реНрдЧ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА (
UPD :
'initialize'
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛):
function( el ) { if( $( el ).hasClass( 'ui-slider' ) ) { return { on: 'slide', getValue: function() { return $( this ).slider( 'option', 'value' ); }, setValue: function( v ) { $( this ).slider( 'option', 'value', v ); } }; } }
рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рддрддреНрд╡ рд╕реНрд▓рд╛рдЗрдбрд░ рд╣реИ рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╡рд┐рдХрд▓реНрдк рд╡рд╛рдкрд╕ рдХрд░реЗрдВред
рд╣рдо
MK.defaultBinders
рд╕рд░рдгреА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
MK.elementProcessors.push( function( el ) { if( $( el ).hasClass( 'ui-slider' ) ) { return { on: 'slide', getValue: function() { return $( this ).slider( 'option', 'value' ); }, setValue: function( v ) { $( this ).slider( 'option', 'value', v ); } }; } });
Doc рд▓рд┐рдВрдХ:
finom.imtqy.com/matreshka/docs/Matreshka.html#defaultBinderрдЙрд╕рдХреЗ рдмрд╛рдж,
.bindNode
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рд╕реМ рд╕реНрд▓рд╛рдЗрдбрд░реНрд╕ рд╣реЛрдиреЗ рд╕реЗ, рд╣рдо рдХреЗрд╡рд▓ рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдмрд╛рдзреНрдп рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрддреНрд╡ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
<div class="slider1"></div> <div class="slider2"></div>
$( ".slider1, .slider2" ).slider({ min: 0, max: 100 }); var mk = new Matreshka(); mk.bindNode({ x1: '.slider1', x2: '.slider2' });
рдкрд░рд┐рдгрд╛рдо:
jsbin.com/celarefu/2/editрдиреЛрдЯрд┐рд╕ рдХреИрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрдВрдзрд╛ рд╣реИ:
mk.bindNode({ x1: '.output .x1', x2: '.output .x2' }, MK.binders.innerHTML() );
MK.binders
рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрд╕реНрдЯрдо рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде
on, setValue, getValue
)ред рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рдЗрдВрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
MK.binders.innerHTML
- рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдирд┐рдпрдорд┐рдд HTML рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ, рдЕрдкрдиреЗ
MK.binders.innerHTML
HTML рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
Doc:
finom.imtqy.com/matreshka/docs/Matreshka.binders.html#innerHTMLрдПрдХ рдРрд╕рд╛ рдирд┐рдпрдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдХреЗ рд▓рд┐рдП
.innerHTML
рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ? рдПрдХ рд╢рдмреНрдж рдореЗрдВ: рд╕реБрд╡рд┐рдзрд╛ред рдХрднреА-рдХрднреА рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ,
MK.defaultBinders
рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рддреБрдЪреНрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рддрддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд░рд▓ рддрддреНрд╡реЛрдВ (
select
,
textarea
,
input[type="text"]
,
input[type="checkbox"]
,
input[type="radio"]
)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
<select class="my-select"> ... </select>
рдЗрд╕ рддрд░рд╣ рдПрдХ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
mk.bindNode( 'x', '.my-select' );
... рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдЧреБрдбрд╝рд┐рдпрд╛ рдЦреБрдж рд╣реА рдЬрд╛рди рдЬрд╛рдПрдЧреА рдХрд┐, рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреИрд╕реЗ рдПрдХ рддрддреНрд╡ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдЖрдо
select
ред
рдЙрджрд╛рд╣рд░рдг:
jsbin.com/tepiyoso/2/edit (рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдЗрдирдкреБрдЯ рдХреЗ рдкрд╛рда рдХреЛ рдмрджрд▓реЗрдВ рдФрд░ рд╕реНрд░реЛрдд рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ)
рдХрдХреНрд╖рд╛ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛ рдХреА рдХрд╕реМрдЯреАрджреЛ рджрд┐рди рдкрд╣рд▓реЗ рдореИрдВрдиреЗ javascript.ru рдлреЛрд░рдо рдкрд░ Matryoshka
рдШреЛрд╖рдгрд╛ рдкреЛрд╕реНрдЯ рдХреА ред AngularJS рдХреЛрдб рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрдХрд░ рдЪрдпрдирдХрд░реНрддрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдпрдереЛрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдЖрд▓реЛрдЪрдирд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХрд╣рд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рд╕реЗрд╡рд╛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рднреА "рдмрд╛рдЗрдВрдбрд┐рдВрдЧ" рдХреЛ js рдХреЛрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ, рдмрдЬрд╛рдп рдШреЛрд╖рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреВрдЫрдиреЗ рдХреЗ - рд╕рд╕реНрддреЗ рдореЗрдВ рдФрд░ рд╣рдВрд╕рдореБрдЦ рд░реВрдк рд╕реЗред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдзреНрдпрд╛рди рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдВрд▓рдЧреНрди рддрддреНрд╡реЛрдВ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рди рдмрджрд▓реЗрдВ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреВрдЖрдИ рдореЗрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
<form> <select data-key="a"></select> <select data-key="b"></select> </form>
рд▓рдХрдбрд╝реА рдХрд╛ рд░рд╛рд╕реНрддрд╛:
$( '[data-key]' ).each( function() { this.bindNode( this.getAttribute( 'data-key' ), this ); });
рд╕рд╣реА рддрд░реАрдХрд╛ (
.each
рдкрд░ рдПрдХ рд▓реЗрдЦ рдореЗрдВ
.each
рд╡рд┐рдзрд┐ рдкрд░
MK.Object
):
this.each( function( v, key ) { this.bindNode( key, this.$( '[data-key=' + key + ']' ) ); });
рдЗрди рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ MVVM рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХрджрдо рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореИрддреНрд░рд┐рдпреЛрд╢реНрдХрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдг рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд╣реИред
рдореИрдВ рдЖрд╡реЗрджрди рдХреЗ "рдЬрдЯрд┐рд▓" рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдВрддрд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рд╡рд░реНрдЧ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рдкрд░ рд▓реЗрдЦ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛), рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИрдВред рд╢рд╛рдпрдж рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╕реЗ рдмрд╣реБрдд рд╡рд┐рдХреГрдд рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдХреЛрдб рдФрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЯрд╛рдЗрдкрд╕реЗрдЯ рдЯрд╛рдЗрдкрд╕реЗрдЯрд┐рдВрдЧ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдпрджрд┐ рд╡рд╣ рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдиреНрдпреВрдирддрдо рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдиред
рдШрдЯрдирд╛рдУрдВ
Matryoshka рдореЗрдВ рдПрдХ рдШрдЯрдирд╛ рдЬрдирд░реЗрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ Backbone.js рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдкрдХреА рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рд┐рд░реНрдл рдЗрд╕ рдврд╛рдВрдЪреЗ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХреЛрдб рдмрд╣реБрдд рд╕реНрдерд┐рд░ рдирд┐рдХрд▓рд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред
var mk = new Matreshka(); mk.on( 'someevent', function( a, b ) { alert( a + ', ' + b ); }); mk.trigger( 'Hello', 'World!' );
рдХреНрдпрд╛ рд╡рд╣ рдкрд░рд┐рдЪрд┐рдд рд╣реИ?
рдкреНрд░рд▓реЗрдЦрди рд▓рд┐рдВрдХ:
finom.imtqy.com/matreshka/docs/Matreshka.html#onрдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд░рд╣рд╛ рд╣реИ:
var mk = new Matreshka(); mk.on( 'change:x', function() { alert( 'New x value is ' + this.x ); }); mk.x = 5;
рд╣рдо рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХрд┐рд╕реА рддрддреНрд╡ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<select class="my-select"> <option>1</option> <option>2</option> <option>3</option> </select>
var mk = new Matreshka(); mk.bindNode( 'x', '.my-select' ); mk.on( 'change:x', function() { alert( 'x is now ' + this.x ); });
рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ: рд╣рдо рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ DOM рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХ рдХрд░рддреЗ рдереЗ, рдФрд░ рдЕрдм рд╣рдо рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддрддреНрд╡реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдЕрдкрдиреЗ рдЖрдк рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЖрдЬрд╝рдорд╛рдПрдБ:
jsbin.com/dadakeba/1/edit.set
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
.set
рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рджреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЛ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
1.
change:*key*
рд▓рд┐рдП рдкрд╛рд╕рд┐рдВрдЧ рдЧреБрдг
change:*key*
рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
"silent"
рдлреНрд▓реИрдЧ)ред
UPD: рдЕрдзрд┐рдХ рдЭрдВрдбреЗ рд╣реИрдВред
mk.on( 'change:x', function( evtOpts ) { alert( evtOpts.myFlag ); }); mk.set( 'x', 5, { myFlag: 'blah' } );
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рднрд▓реЗ рд╣реА
silent: true
рдЭрдВрдбрд╛ рдкрд╛рд╕ рд╣реЛ, рдлрд┐рд░ рднреА рдмрд╛рдзреНрдп рддрддреНрд╡ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
2. рдХреЛрдб рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдоред рдЖрдк
.set
рд╡рд┐рдзрд┐ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
mk.set( { x1: 1, x2: 2 } ); mk.set( { x1: 3, x2: 4 }, { silent: true } );
рдХрд╣рд╛рдБ рд╕реЗ рд▓рд╛рдКрдБ?
Github рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА:
github.com/finom/matreshka (рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдХреЛрдб
build/
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИ)
Matryoshka рдХреЛ jQuery рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рд╕рдВрд╕реНрдХрд░рдг 0.1 рд╕реЗ рд╢реБрд░реВ, jQuery рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдЙрди рдореБрдЦреНрдп рдЪрд┐рдкреНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдпрд╛ рдЬреЛ рдХрд┐ рдореИрддреНрд░рд┐рдпреЛрд╢реНрдХрд╛ рд╡рд╣рди рдХрд░рддреА рд╣реИрдВред рдЖрдк
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдиреНрдп рдХрд╛рд░реНрдп рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЗ рдорд┐рд▓реЗрдВрдЧреЗ:
.off
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛
.remove
рд╣рдЯрд╛рдиреЗ рдХреА рд╕рдВрдкрддреНрддрд┐
.define
рд╣реИрдВрдЧрд┐рдВрдЧ рдХрд╕реНрдЯрдо
.define
.defineGetter
рдПрдХ рддрддреНрд╡ рдкрд░ рдПрдХ
.defineGetter
рд▓рдЯрдХрд╛
.bound
,
.boundAll
, рдПрдХ рддрддреНрд╡ рдпрд╛ рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ, рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ
.unbindElement
рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдПрдХ рддрддреНрд╡ рдХреЗ рдмреАрдЪ рдХреА рдХрдбрд╝реА рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ
... рдФрд░ рдЕрдиреНрдпред
рд╕рдВрд╕реНрдХрд░рдг 0.0.X рдХреНрдпреЛрдВ?
рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдХреЗ рддрд╣рдд рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдм (рдХреЗрд╡рд▓ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ) рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдореИрддреНрд░рд┐рдпреЛрд╢реНрдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдирд╛ рд╣реИ, рди рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд▓реНрдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкреВрд░реНрдг рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпреЛрдВ рд╣реИрдВ (рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЕрднрджреНрд░рддрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ)ред
рдЕрдЧрд▓рд╛, рд╣рдо
MK.Array
рдФрд░
MK.Object
рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдкрд╛рдардХ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрд╛рджреВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ IE8 рдореЗрдВ
Object.defineProperty
рд╕рдорд░реНрдерди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рд▓реЗрдЦ рдХреЛ рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рд╕реМрднрд╛рдЧреНрдп рдФрд░ рд╕рдлрд▓ рдХреЛрдбрд┐рдВрдЧред