рдЬреЙрдирд╕реНрдорд┐рде - рдпреВрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╣рд▓реНрдХрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдврд╛рдВрдЪрд╛



рдЖрдЬ рддрдХ, рдЕрдореАрд░-рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВред рдкреНрд░рд╕рд┐рджреНрдз рдиреЙрдХрдЖрдЙрдЯ, рдПрдВрдЧреБрд▓рд░.рдЬреЗрдПрд╕ рдФрд░ рдПрдореНрдмрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдЕрдиреНрдп рдорд╣рд╛рди рд░реВрдкрд░реЗрдЦрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рдЦрд╝рд╛рд╕рд┐рдпрдд рд╣реИ - рдХреЛрдИ рдиреНрдпреВрдирддрд╛рд╡рд╛рдж рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдХреЛ - рд╡реИрдЪрд╛рд░рд┐рдХ рд╢реБрджреНрдзрддрд╛ рдФрд░ рдПрдорд╡реАрд╕реА рдХреЗ рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдЕрдиреБрдкрд╛рд▓рдиред рдЗрд╕ рд╕рднреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдирдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рд╕реЗ рдЬреЛ рдПрдХ рдЙрд▓реНрд▓реВ рдкрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - Warp9 рдФрд░ Matreshka.js ред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд╢рд┐рд▓реНрдк, рд╕реНрд╡рд╛рдЧрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЙрдирд╕реНрдорд┐рде - рдПрдХ рдпреВрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рд╣рд▓реНрдХрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдврд╛рдВрдЪрд╛ред




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


рдЙрджрд╛рд╣рд░рдг



рдЬреЙрдирд╕реНрдорд┐рде рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдЖрд╡реЗрджрди рд▓рд┐рдЦреЗрдВрдЧреЗ:

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

рдХреМрди рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ: рдпрд╣рд╛рдВ рд╕рдорд╛рдкреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧреНрд░реАрдЯрд┐рдВрдЧ рд╣реИ ред



рдореЙрдбрд▓ рджреЗрдЦреЗрдВ



рдЖрдЗрдП рдПрдХ рджреГрд╢реНрдп рдореЙрдбрд▓ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ "рд╡рд░реНрдЧ" рд▓рд┐рдЦреЗрдВ:

var GreeterViewModel = function(){ } 


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

 var GreeterViewModel = function(){ this.userName = js.bindableValue(); }; 


рдЗрд╕ рдлрд╝реАрд▓реНрдб ( userName ) рдХрд╛ рдЙрдкрдпреЛрдЧ рджреГрд╢реНрдп рдореЗрдВ рджреНрд╡рд┐рджрд┐рд╢ рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЕрдиреНрдп рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕рдВрджреЗрд╢ рдкрд╛рда рдмрдирд╛рдПрдЧреАред рдпрд╣ рдлрд╝реАрд▓реНрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ userName рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░реЗрдВрдЧреЗ:

  var GreeterViewModel = function(){ this.userName = js.bindableValue(); this.greetMessage = js.dependentValue( this.userName, function(userNameValue){ if (userNameValue) { return "Hello, " + userNameValue + "!"; } return "Please, enter your name"; }); }; 


js.d dependentValue рдиреЙрдХрдЖрдЙрдЯ рдореЗрдВ рдЧрдгрдирд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬреЙрдирд╕реНрдорд┐рде рдореЗрдВ рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рдСрдЯреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХрд╛ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИред

рд╡реНрдпреВ рдореЙрдбрд▓ рддреИрдпрд╛рд░ рд╣реИ, рдЕрдм рд╣рдо рд╡реНрдпреВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред



рд░рд╛рдп



рдЪрд▓реЛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

 var GreeterView = function(){ } 


рдПрдХ рджреГрд╢реНрдп рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИ рдФрд░ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рдВрдмрдВрдз рдХрд╛ рддрд░реНрдХред рдорд╛рд░реНрдХрдЕрдк template рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдФрд░ рддрд░реНрдХ init рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ:

 var GreeterView = function(){ this.template = "...  ..."; this.init = function(){ //    } }; 


рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдорд╛рд░реНрдХрдЕрдк рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реАрдзреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦреЗрдВ:

 var GreeterView = function(){ this.template = "<p>Enter your name: <input type='text'/></p>" + "<p class='message'></p>"; this.init = function(){ //     }; }; 


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

 var GreeterView = function(){ this.template = "<p>Enter your name: <input type='text'/></p>" + "<p class='message'></p>"; this.init = function(viewModel){ // <--- //     }; }; 


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

 var GreeterView = function(){ this.template = "<p>Enter your name: <input type='text'/></p>" + "<p class='message'></p>"; this.init = function(viewModel){ this.bind(viewModel.userName).to("input"); // <--- this.bind(viewModel.greetMessage).to(".message"); // <--- }; }; 


рдЕрдм рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдкрдирд╛ рд╡рд┐рдЪрд╛рд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдореЗрдВ id = er рдирдорд╕реНрдХрд╛рд░ тАЩрдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рд╣реИ):

 js.renderView(GreeterView, new GreeterViewModel()).to("#greeter"); 


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



рдмрд╛рдЗрдВрдбрд┐рдВрдЧ



рдЬреЙрдирд╕реНрдорд┐рде рдореЗрдВ рдмрдВрдзрди рдХрд╛ рдЖрдзрд╛рд░ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдиреЙрдХрдЖрдЙрдЯ рдореЗрдВ)ред рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рд╕реА рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ:



рдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдП рдФрд░ рд╢реНрд░реЛрддрд╛ рдмреА рдХреЛ рдлреЙрд░реНрдо рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 js.bind(A).to(B); 


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

 var firstName = js.bindableValue(); //   js.bind(firstName).to(".firstName"); //   jQuery- firstName.setValue("John"); //    


рджреГрд╢реНрдп рдХреЗ рдЕрдВрджрд░, рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛрдб рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:

 //    init   this.bind(viewModel.firstName).to(".firstName"); 


рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, .firstName рдЪрдпрдирдХрд░реНрддрд╛ рдЗрд╕ рдЦреЛрдЬ рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рдЕрдВрджрд░ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВред рдпрд╣ рдмрд╛рд╣рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рджреГрд╢реНрдп рдХреА рдкреВрд░реНрдг рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ js.bind(A).to(B) рдЖрдкрдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХреЗ рд╕рд╛рде "рдШреЛрд╖рдгрд╛рддреНрдордХ" рд╢реИрд▓реА рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ js.bind(A).to(B) рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

 //      : js.bind(firstName).to(".firstName"); js.bind(firstName).to( function(newValue, oldValue){ // <--      //     jQuery  , // , / -    //   newValue/oldValue,  ,    .. }); 


рдпрджрд┐ рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп (рдЕрд╡рд▓реЛрдХрдиреАрдп рдирд╣реАрдВ) рдорд╛рди рдХреЛ рдПрдХ рдмрд╛рдБрдзрдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдХрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╣реЛрдЧрд╛ред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдФрд░ "рдирд┐рдпрдорд┐рдд" рдореЙрдбрд▓ рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 var ViewModel = function(){ this.firstName = "John"; // static value this.lastName = js.bindableValue(); // observable value }; //... // somewhere in the View: this.bind(viewModel.firstName).to(".firstName"); // will sync only once this.bind(viewModel.lastName).to(".lastName"); // will sync on every change 


рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрдЪреНрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 var ViewModel = function(){ this.myAddress = js.bindableValue(); this.initState = function(){ this.myAddress.setValue({ country: 'Russia', city: js.bindableValue(); }); }; }; // ... this.bind(viewModel.myAddress).to(".address", AddressView); // ... 




рджреГрд╢реНрдп рд░рдЪрдирд╛



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



рдПрдХ рд╕рдордЧреНрд░ рджреГрд╢реНрдп рдХреЗ рдЫреЛрдЯреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдЯреНрд░реА:


рдирд┐рд╖реНрдХрд░реНрд╖



рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЬреЙрдирд╕реНрдорд┐рде рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ:



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

Source: https://habr.com/ru/post/In203890/


All Articles