HotMilk - рдореВрдВрдЫ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп

рд╕рдкреНрддрд╛рд╣ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдкреЛрд╕реНрдЯ ^ рд╣реЗрдмреЗ рдкрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдбрдмреНрд▓реНрдпреВ рдорд╣реАрдиреЗред

рдПрдХ-рдкреГрд╖реНрда рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдПрдХ рд▓реЗрдЦ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд╛рдбрд╝рдиреЗ рдФрд░ рдереЛрдбрд╝рд╛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ICANHaz рдкрд░рд┐рд╡рд╛рдж рдХреЛ рдмреБрдХрдорд╛рд░реНрдХ рдХрд┐рдпрд╛ред рдФрд░, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рд▓рдВрдмреЗ рдмрдХреНрд╕реЗ рдореЗрдВ рдПрдХ рддрд░рдл рд░рдЦ рджрд┐рдпрд╛ред

рдФрд░ рдЕрдм, рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдПрдХ рдардВрдбрд╛ рдкрдХрдбрд╝ рд▓рд┐рдпрд╛ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рджреЛ рдореБрдлреНрдд рджрд┐рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП, рдореИрдВ рдЗрд╕ рдЙрджреНрдпрдо рдореЗрдВ рд▓реМрдЯ рдЖрдпрд╛ред рдирддреАрдЬрддрди, рдХреЙрд╕реНрдореЗрдЯрд┐рдХ рдбреЛрдкрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдореЛрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдорд╛рдореВрд▓реА рд╕рд╛рдЗрдХрд┐рд▓ рдорд┐рд▓реАред

рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ ICHHaz рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдереЛрдбрд╝рд╛ рдореВрдВрдЫреЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред рд╡рд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдврд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рднреА рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдкрд╛рда рд╕реАрдзреЗ HTML <script> рдЯреИрдЧ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ



рдХреНрдпреЛрдВ?


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, ICanHaz рд╕рд░рд▓ рд╣реИ: рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди (рдореВрдВрдЫреЗрдВ) рд╣реИрдВ, рд╡рд╣рд╛рдБ рдЯреЗрдореНрдкрд▓реЗрдЯ (рдкреВрд░реНрдг рдФрд░ рдЖрдВрд╢рд┐рдХ) рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВ рдЬреЛ HTML рдХреЛрдб рдореЗрдВ рд╕реАрдзреЗ <script> рдЯреИрдЧ рдореЗрдВ рдЖрдИрдбреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╣реИрдВ, рдФрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ ich рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП, рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрд╛рда рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
$('#myDiv').html(ich.myTemplateName(objModel)); 

рдореИрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдо рдЖрддреНрдорд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ ^ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдбрдмреНрд▓реНрдпреВ рд╕рдВрдЧрдардиред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рдореЗрдВ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд┐рддрд╛рдмреЛрдВ, рдкрддреНрд░рд┐рдХрд╛рдУрдВ, рдлрд┐рд▓реНрдореЛрдВ рдФрд░ рд╕рдВрдЧреАрдд рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ)ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реВрдЪреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЗрдЯрдо, рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдореБрджреНрд░рд╛ (рдореВрд▓реНрдп) рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдПред рдФрд░ рдлрд┐рд░ рд╣рдо рджрд╛рдИрдВ рдУрд░ рдбрд┐рд╕реНрдХрд╛рдЙрдВрдЯ рдХреЙрд▓рдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХреАрдордд рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ ...

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

рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдХреБрдЫ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ред

HotMilk рдХрд╛ рд╡рд┐рд╡рд░рдг


рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реНрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдЗрдВрдЬрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдПрдХ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╕реНрдЯреИрдЪ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рджреВрдз рдХреЛ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдпрд╛рдж рдерд╛ рдХрд┐ рдХрд┐рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореВрдВрдЫреЛрдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рдирд╛рдо, рдХреНрд░рдорд╢рдГ, рдорд┐рд▓реНрдХ рд╕реЗ рдЖрдпрд╛ рдФрд░ рдЧрдпрд╛ (рд╕рд╛рде рд╣реА HTML рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдПрдХ рд╕рдВрдХреЗрдд)ред

HotMilk рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП jQuery, MooTools рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА DOM рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рднреА рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВ, ICanHaz рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ $ addTemplate рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
  HotMilk.$addTemplate('path/to/template', 'template {{text}}'); HotMilk.$addTemplate('path/to#partial', '...'); 

рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреЗрдЬ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ <script> рдЯреИрдЧ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ "рдЯреЗрдХреНрд╕реНрдЯ / рдПрдХреНрд╕-рдореВрдВрдЫ-рдЯреЗрдореНрдкреНрд▓реЗрдЯ" рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдбреЗрдЯрд╛-рд╣реЙрдЯрдорд┐рд▓рдХ-рдкрде рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рд╡реИрд╕реЗ, рдПрдЪрдЯреАрдПрдордПрд▓ 5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдбреЗрдЯрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИ - рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рднреА рд╡реИрдзрддрд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ):
  <script type="text/x-mustache-template" data-hotmilk-path="books/list#item"> <a href="books/{{id}}"><b>{{title}}</b> by {{#author}}{{>author}}{{/author}}</a> </script> 

рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрдВрд╢рд┐рдХ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 'рдкреБрд╕реНрддрдХреЛрдВ / рд╕реВрдЪреА' рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╕рдордп рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЖрдпреЛрдЬрди рдХреЗ рд╕рднреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдХреБрдЫ рд╕рд░рд▓ рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдПрдХ рдЫреЛрдЯрд╛ рдбреЗрдореЛ рдЧрд┐рддреБрдм рдкрд░ рд╣реЙрдЯрдорд┐рд▓рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╣реИ ред

рдпрджрд┐ рдХреЛрдИ рдЕрдЪрд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдХреЛрдИ рд╕реЗрдЯ рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдХреАрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реБрдб рдХреЗ рддрд╣рдд: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рдореИрдВ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЗ рдХреБрдЫ рдЕрдВрд╢реЛрдВ рдкрд░ рдЬрд╛рдКрдВрдЧрд╛

рдЖрдВрд╢рд┐рдХ рд╕рдВрдЧреНрд░рд╣ рд╡рд░реНрдЧред рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдХрд╛рд░рдг, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рдмрдкреИрдЯрд░реНрди рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд░рд╛рд╕рдд рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  PartialsCollection = function(parentPartialsCollection) { var ctor = function() {}; ctor.prototype = parentPartialsCollection || PartialsCollection.prototype; return new ctor(); }; 

рдпрд╣ рдмрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдпрд╣ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдВрд╢рд┐рдХ'рдУрд╡ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдмрдирд╛рддрд╛ рд╣реИред рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдпрд╣ рдЕрдкрдирд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓реЗрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ PartialsCollection рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧреА, рдЬреЛ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореВрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдкрд╛рд╕ рд╣реИ:
  var a = new PartialsCollection(); a.t1 = "template 1" // a.t1 === 'template 1'; a.hasOwnProperty('t1') === true; var b = new PartialsCollection(a); // b.t1 === 'template 1'; b.hasOwnProperty('t1') === false; 

рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдХрд╛рд░рдЦрд╛рдирд╛ред рд▓рдЧрднрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рджрд┐рд▓ред PartialCollection рд╡рд░реНрдЧ рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдореЙрдбрд▓ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд░реЗрдВрдбрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИред
  var createTemplatingFunction = function(template, partialsCollection) { return function(data) { return Milk.render(template, data, function(partialName) { if(partialsCollection[partialName] && partialsCollection[partialName].$value != null) { return partialsCollection[partialName].$value; } else { throw new Error("Unknown partial: " + partialName); } }); }; }; 

рдЯреЗрдореНрдкрд▓реЗрдЯ, рдореЙрдбрд▓, рдФрд░ рдирд╛рдо рд╕реЗ рдЙрдкрдкрдЯреНрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп, рдЬреЛ рдХреЗрд╡рд▓ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдлрд╝реАрд▓реНрдб рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ $ рдореВрд▓реНрдп рд╣реИ, Milk.render рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдлрдВрдХреНрд╢рди рдлреИрдХреНрдЯреНрд░реА рдХреА рдорджрдж рд╕реЗ, рд╣рдорд╛рд░реЗ рдкреЗрдбрд╝ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдиреЛрдб рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  var createTemplateNode = function(template, partialsCollection) { partialsCollection = partialsCollection || new PartialsCollection(); var templatingFunction = createTemplatingFunction(template, partialsCollection); templatingFunction.$ = partialsCollection; //    Function.prototype      ... templatingFunction.$addTemplate = addTemplate; templatingFunction.$removeTemplate = removeTemplate; return templatingFunction; }; 

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрдХ рдФрд░ рдЪрд╛рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рдПрдХ рдЖрдВрд╢рд┐рдХ "рдкрде / # рдЖрдВрд╢рд┐рдХ" рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдХреНрдпрд╛" рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдпрд╛ рдЕрдиреНрдп рд╕рдореВрд╣ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрде рд╣рдореЗрд╢рд╛ рд╕рдореВрд╣реЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░, рдЕрдЧрд░ рдпрд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдиреЛрдб рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
  var addNormalTemplate = function(root, path, template) { if(path.length === 0) { throw new Error("Couldn't create template: name must not be empty"); } var node = nodeBuildPath(root, path.slice(0,-1)), name = path[path.length - 1]; if(hasOwnProperty(node, name)) { //   ,       , //  ,   partial' if(node[name] instanceof GroupNode && nodeIsEmpty(node[name])) { node[name] = createTemplateNode(template, node[name].$); } else { //  -  (   ) throw new Error("Couldn't add template: node " + path.join('/') + " already exists"); } } else { //    ,      , //      node[name] = createTemplateNode(template, new PartialsCollection(node.$)); } }; 

рдЙрдкрдкрдЯреНрдЯрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рди:
  var addPartialTemplate = function(root, path, partialName, template) { //   ,   var node = nodeNavigatePath(root, path) || nodeBuildPath(root, path); if(hasOwnProperty(node.$, partialName)) { throw new Error("Couldn't add partial: node " + path.join('/') + "#" + partialName + " already exists"); } // , : .. partial     , //       , //        node.$[partialName] = createPartialTemplate(template, node.$); }; 

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

рдЪреМрдХрд╕ рдкрд╛рдардХреЛрдВ рдиреЗ hasOwnProperty рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдШреБрдорд╛рд╡рджрд╛рд░ рддрд░реАрдХрд╛ рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдлрд┐рд░ рд╕реЗ рдкреБрдирд░реНрдмреАрдорд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ hasOwnProperty рдирд╛рдордХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдмреНрд░реЗрдХ рди рд╣реЛред рдмреЗрд╢рдХ, рд╕реНрдерд┐рддрд┐ рднреНрд░рдордкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдареАрдХ рд╣реИ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдпрд╣ рд╕рдВрдкреАрдбрд╝рди рдкрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  var hasOwnProperty = function(obj, propName) { return Object.prototype.hasOwnProperty.call(obj, propName); }; 

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

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрджрд░реНрдн




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

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


All Articles