
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐
рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ Google рд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдЗрд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рдорд╛рдирддреЗ рд╣реИрдВ, рдЕрдиреНрдп рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣ рд╕рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдЧреЗ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдмрд╣реБрдд рдХрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдлреНрд░реА рдХреЛрдЯрд╛ рд╕реЗ рдмрд╛рд╣рд░ рднреА рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред
рдЬрд╛рдкрд╛рдиреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдХреА рдПрдХ
рд╕реЗрд╡рд╛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдореИрдВ рдЕрдкрдиреА рдЧрд▓рддрд┐рдпреЛрдВ, рд╕рдлрд▓ рддрдХрдиреАрдХреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рд╕рд╛рдЗрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрд┐рддреНрд░ рд╕реЗ рдЕрдкрдиреА рдЦреБрдж рдХреА рдкрд╣реЗрд▓реА рдмрдирд╛рдиреЗ рдФрд░ рдорд┐рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА:
backbone.js - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ред рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдореБрдлреНрдд рдХреЛрдЯрд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдХреЛрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдореЗрдВ json рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧ рдкрд╣реЗрд▓реА рдкрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
requirement.js - рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди (js, html) рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЖрдк рдЙрди рдХреЛрдб рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗред рдЖрджрд░реНрд╢ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 1% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдк js рдлрд╝рд╛рдЗрд▓ рдХреЛ index.html рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред
undescore.js - рд╕рдВрдкреВрд░реНрдг рд╡рд╕реНрддреБ рдпрд╛ рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрд╣рд╛рд░ред рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдФрд░ рд╢рд╛рдВрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдмреВрдЯрд╕реНрдЯреНрд░реИрдк - рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред
рдХрдо - рдареАрдХ рдирд╣реАрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ? (рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)
рдЦреИрд░ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд╛ - рдХреНрдпрд╛ рдпрд╣ рд╕рдм рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдкрд░ред
рд╡рд╛рд╣ рдпреЗ MVC рд╣реИ !!!
рд╣рдорд╛рд░реЗ рдкреВрд░реЗ MVC рдореЗрдВ рддреАрди рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ: рдореЙрдбрд▓, рд╡реНрдпреВ, рдХрдВрдЯреНрд░реЛрд▓рд░, рдФрд░ рдПрдХ рд░рд╛рдЙрдЯрд░ рдЬреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред
рд░реВрдЯрд░
рд╣рдорд╛рд░рд╛ рд░рд╛рдЙрдЯрд░ рдХреНрд╡реЗрд░реА рд▓рд╛рдЗрди рдореЗрдВ # рдХреЗ рдмрд╛рдж рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдореИрдВрдиреЗ рдбрд┐рдорд╛рдВрдб рдкрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЕрд░реНрдерд╛рдд, рд╕рдм рдХреБрдЫ js рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЬрдм рдХрд┐рд╕реА рднреА рдкреЗрдЬ рдХреЛ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдПрдХ рдЯреНрд░рд┐рдкрд▓ рд╡рд┐рд▓рдВрдм рдерд╛:
- рдирд┐рдпрдВрддреНрд░рдХ рд▓реЛрдбрд┐рдВрдЧ рджреЗрд░реА
- рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЕрдкрдирд╛ рджреГрд╢реНрдп + рдкреНрд▓рд╕ рджреГрд╢реНрдп рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реИ
- рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдкреНрд░реА-рд▓реЛрдбрд┐рдВрдЧ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░, рд╡реИрд╕реЗ, рдореЙрдбрд▓ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рджреЛ рджреЗрд░реА рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдЦреИрд░, рдЕрдВрддрд┐рдо рджреЗрд░реА рд╕реЗ рдХреЛрдИ рдмрдЪ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ (рдареАрдХ рд╣реИ, рдпрд╣ рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдХреЛ рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдЛрдг рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд▓реЛрдб рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдВрдиреЗ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдпрд╛ред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдореЗрдиреВ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдЙрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
require ( [
рдирд┐рдпрдВрддреНрд░рдХ
рдирд┐рдпрдВрддреНрд░рдХ, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдХреА рддрд░рд╣, рдХреА рд╢реИрд▓реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
define(['backbone/text!backbone/templates/start.html'], function(template){ var StartView = Backbone.View.extend({ el: "#block", template: _.template(template),
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рд╡рд╛рдкрд╕реА рдорд╛рди рд╕рдВрд╕рд╛рдзрди рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рд╣реИред рдЕрдЬреАрдм рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмреИрдХрдмреЛрди / рдЯреЗрдХреНрд╕реНрдЯ! рдмреИрдХрдмреЛрди / рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рд╕реНрдЯрд╛рд░реНрдЯред Html рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рд╕рд░реНрд╡рд░ рд╕реЗ рддреБрд░рдВрдд рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╛рда рдкреНрд▓рдЧрдЗрди рдХреА рдорджрдж рд╕реЗред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
- рдкрд╛рда - рд╕рд░реНрд╡рд░ рд╕реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдкреНрд▓рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рджреЗрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХреЛрдИ рднрд╛рд░ рдирд╣реАрдВред рд╡реИрд╕реЗ, рдореБрдХреНрдд рдХреЛрдЯрд╛ рдореЗрдВ, рд╡рд╣ рдХреЗрд╡рд▓ рдПрдХ рд╣реИ (рдпрджрд┐)
- i18n - рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- рдбреЛрдорд░реА - рдбреЛрдо рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЖрджрд░реНрд╢
рдХреЗрд╡рд▓ рдПрдХ рдореЙрдбрд▓ рд╣реИ - рдпрд╣ рдЬрд╛рдкрд╛рдиреА рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА (рдкрд╣реЗрд▓реА) рдХрд╛ рдореЙрдбрд▓ рд╣реИ, рдЗрд╕рдореЗрдВ рдЪреМрдбрд╝рд╛рдИ, рдКрдВрдЪрд╛рдИ, рдбреЗрдЯрд╛, user_data, рд╢реАрд░реНрд╖рдХ рдЬреИрд╕реЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ред рд╕реЗрд╡рд╛ рди рдХреЗрд╡рд▓ рддреИрдпрд╛рд░ рдкрд╣реЗрд▓реА рдкрд╣реЗрд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреВрдареЗ рднреА рдмрдирд╛ рд░рд╣реА рд╣реИред рдореЙрдбрд▓ рдХреЛ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
define (function(){ var Puzzle = Backbone.Model.extend({ urlRoot : '/puzzle/', defaults: { title: '', width: 5, height: 5 },
рд░рд╛рдп
рджреГрд╢реНрдп рд╕рдмрд╕реЗ рдЖрдо HTML рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<div id="data"><%= data %></div>
рдФрд░ <%%> рдЯреИрдЧ рдореЗрдВ рдЖрдк рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢рд░реНрддреЗрдВ:
<% if (loaded) { %> <div></div> <% } else { %> <div>...</div> <% } %>
рдирд┐рдпрдВрддреНрд░рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдбреЗрдЯрд╛ рджреГрд╢реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
var data = { 'loaded': true }; $(this.el).html(this.template(data));
рдЕрдиреБрдХреВрд▓рди
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╣рд▓реЗ рдкреЗрдЬ рд▓реЛрдб рд╣реЛрдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рджреВрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП node.js рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рди рдХрд╛рд░реНрдпрдХреНрд░рдо js рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдБ рдФрд░ рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
build.js ({ baseUrl: "../cross/static/js", name: "common", out: "../cross/static/js/common-pro.js" })
рдФрд░ рд╣рдорд╛рд░реЗ рдмрд┐рд▓реНрдбрд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:
node r.js -o build.js
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдорд╛рд░реА рд╕рднреА рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ (рдореЙрдбрд▓, рдирд┐рдпрдВрддреНрд░рдХ, рд╡рд┐рдЪрд╛рд░, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдлрд╝рд╛рдЗрд▓реЗрдВ) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ,
рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ ред
Google рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдХреА рдПрдХреАрдХрд░рдг
рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реИ рдЕрдЧрд░ рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рди рдкреГрд╖реНрдареЛрдВ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╣рдо рд╕рд╛рдЗрдЯ рдкрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд▓реЛрдб рджреЗрдЦреЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЬреА рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреЛрдб рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдкрд╣рд▓рд╛ рдЦрд╛рддрд╛ рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкреЗрдЬ рд▓реЛрдбрд┐рдВрдЧ рдЦреАрдВрдЪрддрд╛ рд╣реИред
рдкрд╣рд▓рд╛ рднрд╛рдЧ:
var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA--']); (function () { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
рднрд╛рдЧ 2, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рд░рд╛рдЙрдЯрд░ рдлрд╛рдпрд░ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЗрд╕рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ (show_view) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдмрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
_gaq.push(['_trackPageview', document.location.href]);
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб
рдХреБрдЫ рддрдереНрдп:
- Ndb рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Gae рд╕рд╣рд╛рдпрддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ)ред рдЗрд╕реЗ рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрдИ рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рдПрдХ рдХреНрд╡реЗрд░реА рдореЗрдВ рдХреИрд╕реЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреЗрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░реНрд╡рд░ рдореЗрдВ рдХрд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ), рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреИрд╢ рд╣реИред
- рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдЬрд╕рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдХ рдЫреЛрдЯреА рд╕реА рдЦреЛрдЬ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ рдЬреЛ рдПрдХ рдХреНрд░реЙрд╕рд╡рд░реНрдб рдкрд╣реЗрд▓реА рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡рд╣ рдЕрдВрдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд╣реЗрдбрд░ рд╕реЗ рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реВрдЪреА рд░рдЦреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рдо рдЖрдП рдЬреЛ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ):
class PuzzleIndex(db.Model): keywords = db.StringProperty(repeated=True) update_date = db.DateTimeProperty(auto_now=True) @classmethod def index(cls, puzzle): index = PuzzleIndex.get_or_insert(str(puzzle.key.id())) index.keywords = cls.stemming(puzzle.title) index.put() @classmethod def delete_index(cls, puzzle): db.Key(PuzzleIndex, str(puzzle.key.id())).delete() @classmethod def stemming(cls, text): words = set(re.split(ur'\s+', text.lower(), re.U)) return list(filter(None, words)) @classmethod def search(cls, text, limit=10, offset=0): puzzles = [] words = cls.stemming(text) query = PuzzleIndex.query()\ .order(-PuzzleIndex.update_date)\ .filter(PuzzleIndex.keywords.IN(words)) indexes = query.fetch(limit + 1, offset=offset, keys_only=True) if len(indexes): keys = [db.Key(Puzzle, int(key.id())) for key in indexes] puzzles = db.get_multi(keys) return puzzles
рдзрдиреНрдпрд╡рд╛рдж
рд▓реЗрдЖрдЙрдЯ рдФрд░ рд▓реЛрдЧреЛ рдХреЗ рд▓рд┐рдП рдорджрдж рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреЛрд╕реНрдд
рд░реЗрдиреБрдо рдХреЛ рдзрдиреНрдпрд╡рд╛рджред
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВ Gae рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рдлреА рд╕рд╕реНрддреА рд╣реЛ рдФрд░ рд╕рд╛рде рд╣реА рдЧреИрд░-рд╢реВрдиреНрдп рдЯреНрд░реИрдлрд╝рд┐рдХ рд╣реЛред