рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдкрд░реАрдХреНрд╖рдг, рд╕рдВрдХрд▓рди рдФрд░ MVVM

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

рдкрд░реАрдХреНрд╖рдг


рд╡рд╣ рдмрд┐рд▓реНрдмреЛ рдХреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░реВрдорд╛рд▓, рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдкрд╛рдЗрдк рдФрд░ рддрдВрдмрд╛рдХреВ рд▓рд╛рдпрд╛ред


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

рднрд▓реЗ рд╣реА рдпрд╣ рд╕реБрдирдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рднреА рдЕрдЬреАрдм рд▓рдЧреЗ, рд▓реЗрдХрд┐рди рдЯреЗрд╕реНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ HTML рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред
рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ
<!DOCTYPE html> <html> <head> <title>Binding tests</title> <link rel="stylesheet" href="css/qunit.css" type="text/css" media="screen"> <script type="text/javascript" src="js/libs/require.js"></script> <script type="text/javascript" src="js/libs/qunit.js"></script> <script type="text/javascript" src="js/binding.js"></script> </head> <body> <h1 id="qunit-header">Tests</h1> <h2 id="qunit-banner"></h2> <div id="qunit-testrunner-toolbar"></div> <h2 id="qunit-userAgent"></h2> <ol id="qunit-tests"></ol> <div id="trash"></div> </body> </html> 


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдпрд╛ рдпрд╣рд╛рдВ рдХреНрд▓реЛрдирд┐рдВрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓, рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдореВрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ред рд╣рдо рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ - рдФрд░, рд╡реЙрдЗрд▓рд╛, рдпрд╣ рд╣рдореЗрдВ рдЬрд▓реНрджреА рд╕реЗ рдЧрд┐рд░рддреЗ рд╣реБрдП рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЦреИрд░, рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЦреБрдж рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ, рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ, рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
 test("Hash tests", function() { var obj = {}; ok(HashUtils.get(0) == HashUtils.get(0), "Equal objects, one hash (Number)"); ok(HashUtils.get(obj) == HashUtils.get(obj), "Equal objects, one hash (Object)"); ok(HashUtils.get({}) != HashUtils.get({}), "Different objects, different hashes"); }); 



рдХреНрд╡рдирд┐рдЯ рдореЗрдВ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛рдПрдВ рднреА рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЖрддреНрдорд╛ рдХреЛ рдЧрд░реНрдо рдХрд░рддреА рд╣реИрдВред рдЕрдкрдиреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рд╣-рд▓реЗрдЦрдХ рдмрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд╣-рд▓реЗрдЦрдХ рдмрдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрд╕ рддрд░реНрдХ рдХреЛ рд╕рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд╣ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИред

 QUnit.config.urlConfig.push({ id: "min", label: "Minified source", tooltip: "Load minified source files instead of the regular unminified ones." }); QUnit.config.autostart = false; ... require( tests.concat(document.location.href.indexOf("min=true") > 0 ? productionRequire : developmentRequire), function() { QUnit.start(); } ); 


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

Qunit рдореЗрдиреВ рдореЗрдВ рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ url рдореЗрдВ рд╣рдо min = true рджреЗрдЦреЗрдВрдЧреЗ
рд╣рдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╢реБрд░реБрдЖрдд рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЕрджреНрднреБрдд ruquirejs рдкреБрд╕реНрддрдХрд╛рд▓рдп рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ , рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдпрд╛ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдпрд╣рд╛рдБ рдареАрдХ, рдмрд░рд╛рдмрд░, рдпрд╛ рдЧрд╣рд░реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рджреВрдВрдЧрд╛ - рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдЕрдЧрд░ рдпрд╣рд╛рдБ рдПрдХ рдкреВрд░реНрдг рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рд╡рд░рдг рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдкрд░реАрдХреНрд╖рдг рдФрд░ qunit рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╢рд╛рдпрдж рд╕рднреАред

рдХреЛрдб рд╕рдВрдХрд▓рди

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╕рд░реБрдорди рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдорд╣рд╛рди рд╢рдХреНрддрд┐ рдмреБрд░рд╛рдИ рдкрд░ рдЕрдВрдХреБрд╢ рд▓рдЧрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рдВрд╕рд╛рд░рд┐рдХ рдХрд╛рд░реНрдп рдЕрдВрдзреЗрд░реЗ рдХреЛ рд╢рд╛рдВрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЗрдо рдФрд░ рджрдпрд╛ред рдмрд┐рд▓реНрдмреЛ рдмреИрдЧрд┐рдиреНрд╕ рдХреНрдпреЛрдВ? рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореИрдВ рдбрд░рд╛ рд╣реБрдЖ рд╣реВрдВ рдФрд░ рд╡рд╣ рдореБрдЭреЗ рд╣рд┐рдореНрдордд рджреЗрддрд╛ рд╣реИред


рд╢рд╛рдпрдж рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд▓рдбрд╝рд╛рдИ рдереЛрдбрд╝реА рдЕрдЬреАрдм рд▓рдЧрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЗрдЯ рд▓реЛрдб рд╕рдордп рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 10-20% рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рджрд╛рд░реНрд╢рдирд┐рдХ рд░реВрдк рд╕реЗ рд▓реЗрдВрдЧреЗ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдпрд╣ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред ред

рдПрдХ рд╕рдВрдХрд▓рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ Google рдмрдВрдж рдХреЛ рдЪреБрдирд╛ рдФрд░ рдореБрдЭреЗ рдирд┐рдореНрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд┐рд▓реА:
build.sh
rm -r -f рдЖрдЙрдЯ
mkdir рдмрд╛рд╣рд░

cat js / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / utils.js js / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / dom.js js / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / model.js js / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / рдЗрд╡реЗрдВрдЯ.js js / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / рдмрд╛рдзреНрдпрдХрд╛рд░реА.js js / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ / рдЯреЗрдореНрдкреНрд▓реЗрдЯ.рдЬреЗрдПрд╕ / рдЖрдЙрдЯ / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ.рдЬреЗрдПрд╕
java -jar libs / compiler.jar - js out / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ .js --js_output_file рдЖрдЙрдЯ / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ- min.js --compilation_level SIMPLE_OPTIMIZATIONS

cat out / рдмрд╛рдЗрдВрдбрд┐рдВрдЧред js js / ui / button.js js / ui / input.js> рдЖрдЙрдЯ / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ- ui.js
java -jar libs / compiler.jar --js / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ-ui.js --js_output_file рдЖрдЙрдЯ / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ-ui-min.js --compilation_level SIMPLE_OPTIMATIONS


рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд▓рд╛рдЗрди рдСрдл рдЗрдВрдЯрд░реЗрд╕реНрдЯ рд╣реИ, рд╡рд╣ рд╣реИ
java -jar libs / compiler.jar - js out / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ .js --js_output_file рдЖрдЙрдЯ / рдмрд╛рдЗрдВрдбрд┐рдВрдЧ- min.js --compilation_level SIMPLE_OPTIMIZATIONS

js - рд╕рдВрдХрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо
js_output_file - рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо
compilation_level - рд╕рдВрдХрд▓рди рд╕реНрддрд░

рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреВрд░реА рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ
 java -jar compiler.jar --help 


BindItJS


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

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

рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдЬреЛ рдЖрдЧреЗ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА ред
рдФрд░ рдореИрдВ рдПрдХреНрд╕рдУ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдЖрдк рдпрд╣рд╛рдВ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ

рдкрд╛рда рдореЗрдВ рдХреЛрдИ "IMHO" рдХрд░реНрдЯрд┐рд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдкрдврд╝рддреЗ рд╣реБрдП рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд░рд╛рдп рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЗ рдзрд╛рд░реНрдорд┐рдХ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╡рдирд╛ рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдЪреАрдЬ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреА рддрд░реНрдХрдкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЖрдирдВрдж рдХреЗ рд▓рд┐рдП рдкрдврд╝реВрдВрдЧрд╛ рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдпрдереЛрдЪрд┐рдд рдЙрддреНрддрд░ рджреВрдВрдЧрд╛ред рд╣рдо рд╕рднреА рдпрд╣рд╛рдБ рд╡рдпрд╕реНрдХ рд╣реИрдВ, рд╣рд╛рдБред



рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкрд╡рд┐рддреНрд░ рддреНрд░рд┐рдореВрд░реНрддрд┐ рдорд┐рд▓рддреА рд╣реИ: HTML рд▓реЗрдЖрдЙрдЯ, рджреГрд╢реНрдп, рдореЙрдбрд▓ред рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореБрдЭреЗ рдХреБрдЫ рд╣рдж рддрдХ рдмреЗрдорд╛рдиреА рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ html рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдорд┐рд▓рд╛:
 <div class="pull-left" bind-data="board" bind-handler="BoardBinding"></div> 

рдмрд╛рдЗрдВрдб-рдбреЗрдЯрд╛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╣рд╛рдВ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдмрд╛рдЗрдВрдб-рд╣реИрдВрдбрд▓рд░ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдирд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рдмрд╛рдЗрдВрдб-рдлреЙрд░реНрдо рднреА рдкреЗрд╢ рдХрд┐рдпрд╛, рдЬреЛ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдм рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдмрд╛рдЗрдВрдб-рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдмрд╛рдЗрдВрдб-рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛ ред рдЯреИрдЧреЙрд▓реНрдЯрд╣реИрдВрдбрд▓рд░ рдЯреИрдЧ рдХреЗ рдирд╛рдо рд╕реЗред
 var ButtonBinding = { init : function(binding) { binding.element.onclick = function() { binding.callBindingFunction(); } }, modelChanged : function(binding) { if (ObjectUtils.getObjectType(binding.getModel()) != ObjectUtils.TYPE_FUNCTION) { binding.element.setAttribute("disabled", "disabled"); return; } binding.element.removeAttribute("disabled"); } }; Binding.DefaultHandlers["BUTTON"] = ButtonBinding; 

 <button class="btn btn-success" bind-data="newGame">New game</button> 


рдЖрдЗрдП ButtonBinding рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ - рдЗрд╕рдореЗрдВ 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ: init , рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореЙрдбрд▓ рдФрд░ рджреГрд╢реНрдп рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдореЙрдбрд▓рдЪреЗрдВрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореЙрдбрд▓ рдмрджрд▓рдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЙрдбрд▓рдЪреИрдирдб рдореЗрдВ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд╣реИрдВ: рдореЙрдбрд▓ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡рд╕реНрддреБ рд╣реИ, рдФрд░ рдШрдЯрдирд╛ рдореЗрдВ рдШрдЯрдирд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡рдпрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
Xo рдореЗрдВ , рд╣рдорд╛рд░реЗ рдкрд╛рд╕ $ data.Game.board рд╣реИ - рдпрд╣ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред рдЬрдм рд╣рдо "рдирдпрд╛ рдЧреЗрдо" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ $ data.Game рдХреА рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рддреА рд╣реИ
 newGame : function() { this.board = new Board(DEFAULT_SIZE); this.state = { player : 0, winner : null }; } 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рджреГрд╢реНрдп рдХреЗ рдореЙрдбрд▓рдЪреИрди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ $ data.Game рдХреЛ рдЙрд╕ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдиреЗ рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдШрдЯрдирд╛ рд╡рд┐рд╡рд░рдг рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рд░реЛрдбрдореИрдк

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


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рд╕рд╛рдореВрд╣рд┐рдХ рдорди рд╕реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

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


All Articles