рд╣рдо рдЕрдкрдиреЗ рд░реВрдмреНрд░рд┐рдХ "рдбрд░реНрдмреА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рджрд┐рди рднреА рдирд╣реАрдВ" рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЖрдЬ рд╣рдо рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ (рдЕрдВрдд рдореЗрдВ!) рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ Derby.js рдХреЗ рдореВрд▓ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЖрдкрдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдбрд░реНрдмреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдХреЗрд▓реЗ рдХреНрдпреЛрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдЪреМрдЦрдЯреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдирдХреЗ рдЦреБрд╢рдорд┐рдЬрд╛рдЬ рд╕рд╣рдпреЛрдЧреА рдПрдХ рдордЬрд╝реЗрджрд╛рд░ рджреЛрд╕реНрддрд╛рдирд╛ рдЯреАрдо рдореЗрдВ рдФрд░ рд╕рдорд╛рди рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реА рддрд░рд╣ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдкрдврд╝реЗ рдЧрдП рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░
рдХрд░реЗрдВ ред
рдЖрдЗрдП рдЖрд╡реЗрджрди рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:
derby bare habr cd habr npm start
рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ
http: // localhost: 3000 / ред
рд╣рдо рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
рдмрд╕ рдХреНрдпрд╛ рд╣реБрдЖ? рдЖрдкрдХрд╛ рдЕрдиреБрд░реЛрдз рд╕рд░реНрд╡рд░ рдкрд░ рдЧрдпрд╛, рдЬрд╣рд╛рдВ рдЗрд╕реЗ рд╕рднреА рдХрдиреЗрдХреНрдЯ рдорд┐рдбрд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ /lib/server/index.js рд╕реЗ рдмрджрд▓реЗ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
.use(app.router())
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд░рд╛рдЙрдЯрд░ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ /lib/app/index.js рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
app.get('/', function(page) { page.render(); });
рдпрд╣рд╛рдВ рдкрде '/' рдХреЗ рд▓рд┐рдП рд╣рдо рдЦрд╛рдХрд╛ / рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ /app/index.html рд╕реЗ html рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ рдмрд┐рд▓реНрдХреБрд▓ index.html? рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╣реИред рдЖрдк рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛:
app.get('/', function(page) { page.render('index'); });
Index.html рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдмреЙрдбреА рд╕реЗрдХреНрд╢рди рд╣реИред рдЗрд╕рдореЗрдВ рд╣реЗрдб, рд╣реИрдбрд░, рдлреБрдЯрд░, рд╕реНрдХреНрд░рд┐рдкреНрд╕, рдЯрд╛рдЗрдЯрд▓ рдЖрджрд┐ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдбрд░реНрдмреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЗрдВрдЬрди, рдЬрдм рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП html рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмреЙрдбреА рд╕реЗрдХреНрд╢рди рдХреЛ рдЦреЛрдЬ рд▓реЗрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рд░рдЦ рджреЗрдЧрд╛, рдФрд░ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп (рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВ), рдпрд╣ рдЦрд╛рд▓реА рдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдбрд╛рд▓ рджреЗрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЧреНрд░рд╛рд╣рдХ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style id="$_css"></style> </head> <body> Bare <script defer="" async="" src="/derby/lib-app-index.js"></script> </body> </html>
рд╣рдо рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ? рд╢реАрд░реНрд╖рдХ - рдЦрд╛рд▓реАред рдХреЛрдИ рд╕реНрдЯрд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИрдВред рд╕рд┐рд░ рднреА рд▓рдЧрднрдЧ рдЦрд╛рд▓реА рд╣реИред рдЬреИрд╕реА рдХреА рдЙрдореНрдореАрдж рдереАред рд▓реЗрдХрд┐рди рд╢рд░реАрд░ рдореЗрдВ рдХреБрдЫ рдирд┐рд╣рд┐рдд рд╣реИред
рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдФрд░ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ? рдиреИрдЯ рдиреЗ рдХрд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЙрдиреНрд╣реЛрдВрдиреЗ Google рдЦреЛрдЬ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡рд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдпрд╛ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд╛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрдирд▓рд╛рдЗрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╢реИрд▓рд┐рдпрд╛рдБ рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬрд╝реА рд╕реЗ рд▓реЛрдб рд╣реЛрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП / рд╢реИрд▓рд┐рдпреЛрдВ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реЗрдб рд╕реЗрдХреНрд╢рди рдореЗрдВ рдЖрдкрдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ /derby/lib-app-index.js рд╕рд┐рд░реНрдл рд╣рдорд╛рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ, рдЬреЛ рд▓реЛрдб рд╣реЛрддреЗ рд╣реА рдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕рднреА HTML рдкреАрдврд╝реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЖ рдЬрд╛рдПрдЧреАред
- рдпреЗ рдбрд░реНрдмреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рд╕рд░реНрд╡рд┐рд╕ рдЯреИрдЧ рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ HTML рдФрд░ рдореЙрдбрд▓ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╕рдордп, рдореЙрдбрд▓ рдмрджрд▓рддреЗ рд╕рдордп, рдкреВрд░реЗ рдкреГрд╖реНрда рдХреЛ рддрд╛рдЬрд╝рд╛ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ html рдХреЗ рднрд╛рдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рд░рд╛рдЙрдЯрд░ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдмреЙрдбреА рд╕реЗрдХреНрд╢рди рдУрд╡рд░рд▓реЛрдб рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдмрд╣реБрдд рдЖрд▓рд╕реА рдереЗ, рд╕реЗрдЯ рдирд╣реАрдВ рдереЗ рдФрд░ рд╡реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВред
рдЖрдк рдЯреЗрдореНрдкреНрд▓реЗрдЯ (рд╕рд╛рде рд╣реА рд╢реИрд▓рд┐рдпреЛрдВ) рдореЗрдВ рдкрд╛рда рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рддреБрд░рдВрдд рдкрд░рд┐рд╡рд░реНрддрди рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИред рдпрджрд┐ рдЖрдк html рдФрд░ css рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк js рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЗрдП рдбреЗрдЯрд╛ рд╕реЗ рджреГрд╢реНрдп рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред рдбрд░реНрдмреА рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдВрджрд░реНрдн рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдЧрд▓реЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ page.render () рдФрд░ рд╡рд╣ рдбреЗрдЯрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо html рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
app.get('/', function(page) { page.render({text: 'text from Context'}); });
<Body:> {{text}}
рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдбрдмрд▓ {{}} рдХреЛрд╖реНрдардХ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдбреЗрдЯрд╛ рдпрд╛ HTML рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджрд░реНрдн рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЗрдПрд╕-рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдбреЗрдЯрд╛ (рд╕рдВрджрд░реНрдн) рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреА рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдлреА рд╕реАрдорд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ, рд╢рд╛рдпрдж, рдХреЗрд╡рд▓ рдХреБрдЫ рд╕реНрдереИрддрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рднреА рд╢рдХреНрддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред
рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ
рд╕реЗ рд╣реА рдХреБрдЫ рд▓рд┐рдЦрд╛ рд╣реБрдЖ рд╣реИ, рддрд╛рдХрд┐ рджреЛрд╣рд░рд╛рдпрд╛ рди рдЬрд╛рдПред
рдореЙрдбрд▓ рдХрд╣рд╛рдВ рд╕реЗ рд▓рд╛рдПрдВ? рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ (рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╣реИрдВ рдпрд╛ рд╕рд░реНрд╡рд░ рдкрд░), рд▓реЗрдХрд┐рди рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реНрдХ (рдкреЗрдЬ рдХреЗ рдмрд╛рдж) рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ:
app.get('/', function(page, model) { page.render(); });
рдЖрдЗрдП рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
app.get('/', function(page, model) { model.set('_page.text', 'text in model'); page.render(); });
_page.text рдЙрд╕ рдореЙрдбрд▓ рдореЗрдВ рдкрде рд╣реИ рдЬрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рдкрд╛рда рдЭреВрда рд╣реЛрдЧрд╛ред Json рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрд╕рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ:
var obj = model.get('_page'); obj === {text: 'text in model'}
рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд░рд╛рд╕реНрддрд╛ рд╕реНрдерд╛рдиреАрдп рд╣реИред рдпрд╣реА рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдореЙрдбрд▓ рдореЗрдВ рдореМрдЬреВрдж рд╣реИред рдФрд░ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдЕрдиреНрдп рдореЙрдбрд▓реЛрдВ (рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдкрд░) рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдХреЛрдИ рднреА рд╕реНрдерд╛рдиреАрдп рдкрде рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди _page рдСрдмреНрдЬреЗрдХреНрдЯ рдереЛрдбрд╝рд╛ рд╡рд┐рд╢реЗрд╖ рд╣реИред рдпрд╣ рд╣рд░ рдмрд╛рд░ рд╕рд╛рдл рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд░рд╛рдЙрдЯрд░ рдЪрд╛рд▓реВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдЗрд╕ рдкреГрд╖реНрда рд╕реЗ рдЬреБрдбрд╝реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдореЙрдбрд▓ рд╕реЗ рдбреЗрдЯрд╛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрджрд▓рддреЗ рд╣реИрдВ:
<Body:> {{_page.text}}
рдЖрдЗрдП рдбреЗрдЯрд╛ рдФрд░ HTML рдХреЗ рдмреАрдЪ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
<Body:> <input type="text" value={_page.text} /> {_page.text}
рдПрдХрд▓ рдХреЛрд╖реНрдардХ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХрд╛ рдбреЗрдЯрд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ html рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдирдкреБрдЯ рдореЗрдВ рдореВрд▓реНрдп рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдореЙрдбрд▓ рдореЗрдВ рдореВрд▓реНрдп рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЗрдирдкреБрдЯ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдкрд╛рда рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдбреЗрдЯрд╛ рдФрд░ HTML рдХреЗ рдмреАрдЪ рдПрдХ рджреЛ-рддрд░рдлрд╝рд╛ рд▓рд┐рдВрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ? рдХреЛрдб рдХреА 3 рд▓рд╛рдЗрдиреЗрдВ? рдХрд╣реАрдВ рдЧрдВрднреАрд░ рддреЛ рдирд╣реАрдВ?
рдЪрд▓реЛ рдПрдХ рдмрд╣реБрдд рдЧрдВрднреАрд░ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ! рдЕрдм рд╣рдо рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ html рдмрджрд▓рддреЗ рд╣реИрдВ, рдЗрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдбреЗрдЯрд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рдбреЗрдЯрд╛ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрд░ рд░реЗрдЬреЛрд▓реНрдпреВрд╢рди рд░рд┐рдЬреЙрд▓реНрдпреВрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рднреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдХреЛ рдЙрди рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдПрдЪрдЯреАрдПрдордПрд▓ред рдХреНрдпрд╛ рдпрд╣ рдлрд┐рдЯ рд╣реЛрдЧрд╛? рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ (рдбрд░реНрдмреА рд╕реЗ рдкрд╣рд▓реЗ) рдврд╛рдВрдЪреЗ рдкрд░ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ? рдХреЛрдб рдХреА рдХрд┐рддрдиреА рд▓рд╛рдЗрдиреЗрдВ?
app.get('/', function(page, model) { model.subscribe('page.text', function(err) { if (!model.get('page.text')) { model.set('page.text', 'text in model'); } page.render(); }) });
<Body:> <input type="text" value={page.text} /> {page.text}
рдХреНрдпрд╛ рд╡рд╣ рд╕рдм рд╣реИ? o_O рдЦреИрд░, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рд╛рдБред рдЦреЛрд▓реЗрдВ
http: // localhost: 3000 / рдХрдИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдФрд░ рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓рддреЗ рд╣реИрдВред
page.text рдПрдХ рд╕реБрджреВрд░ рдкрде рд╣реИред рд╕реНрдерд╛рдиреАрдп рдкрде рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдкреЗрдЬ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдЖрдИрдбреА рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рджреВрд░рд╕реНрде рдкрде рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ: 'Users.8ddd02f1-b82d-4a9c-9253-fe5b3b86ef41.name', 'customers.8ddd02f1-b4d-4a9c-9253-fe5b3b86ef41.properties.isLead', products 'рдЙрддреНрдкрд╛рджред' 4a9c-9253-fe5b3b86ef41.prices.1.value 'ред
model.subscribe - рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдкрде 'page.text' рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреИрд╕реЗ рд▓реЗрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рд╕рд░реНрд╡рд░ рд╣рдореЗрдВ рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рднреЗрдЬреЗрдЧрд╛ред
рд╕реНрд░реЛрдд :-)
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдПрдирдкреАрдПрдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ
Derby.js рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордЧреНрд░реА