рд╕реНрдХрд╛рд▓рд╛ рд▓рд┐рдлреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЕрд╡рд▓реЛрдХрди

рдкрд░рд┐рдЪрдп


рд▓рд┐рдлреНрдЯ рдХреЛ рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╡рд┐рджреНрдпрдорд╛рди рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ (рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдХрдо рдЬреНрдЮрд╛рдд рд╣реИрдВ), рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕реНрдХрд╛рд▓рд╛ рднрд╛рд╖рд╛ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдорд╛рдирдХ MVC рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдЬреНрдЮрд╛рди рдЖрдкрдХреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рд╡реНрдпрд╛рдкрдХ рдХрд░реЗрдЧрд╛ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рдкрд╣рд▓реЗ рджреЗрдЦреЗрдВ


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

рдлреЙрд░реНрдо рдХреЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╕реНрдирд┐рдкреЗрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

class Snippet = { def form_elements = { var textValue: String = "" var selectValue: String = "" def process() { println(textValue) println(selectValue) } // SHtml.onSubmit -      ,        .         - . "#textField" #> SHtml.onSubmit(value => textValue = value) & "#selectField" #> SHtml.onSubmit(value => selectValue = value) & "#hidden" #> SHtml.onSubmitUnit(process) // hidden      process() } } 


рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ:

 <form lift="Snippet.form_elements"> <input id="textField" type="text"/> <select id="selectField"> <option></option> <option></option> <option></option> </select> <input id="hidden" type="hidden"> <input type="submit"/> </form> 


рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ


рдореИрдВ "рдЪрд░" рд▓рд┐рдВрдХ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рднреА рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдЪрд░ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЪрдпрдирдХрд░реНрддрд╛ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
рдЖрдИрдбреА = "рдПрд▓реАрдорд┐рдб" рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдЦреЛрдЬрдирд╛ рдФрд░ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ "рдХреНрд▓рд╛рд╕" рд╕реЗрдЯ рдХрд░рдирд╛

 def snippet = "#elemid [class]" #> "someclass" 


& рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдХрдИ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ

 def snippet = { "button [onclick]" #> Alert("some reaction") & "button [class]" #> "someclass" } 


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

 <div lift="Snippet_class.snippet"> <button>  </button> </div> 


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

рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕


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

рд╕реБрд░рдХреНрд╖рд╛


рд▓рд┐рдлреНрдЯ OWASP рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдмрд╕ рд▓рд┐рдлреНрдЯ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦреЗрдВред рдпрд╣рд╛рдБ Rasmus Lerdorf (рдпрд╛рд╣реВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдкреНрд░рднрд╛рд░реА рд╡реНрдпрдХреНрддрд┐) FourSquare (рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдлреНрдЯ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ:

"рдЪрд╛рд░ рд╕рд┐рддрд╛рд░реЛрдВ @foursquare - рдкрд╣рд▓реА рд╕рд╛рдЗрдЯ рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдПрдХ рднреА рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдерд╛ (рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд╕рдХрддрд╛ рдерд╛)"


twitter.com/rasmus/status/5929904263

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

рдЕрдЬрд╛рдХреНрд╕ рд╕рдорд░реНрдерди


рдпрд╣рд╛рдБ рдирд┐рдпрдорд┐рдд рдЕрдЬрд╛рдХреНрд╕ рдмрдЯрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 class Snippet { def button = { def process() = { println("      "); Alert(" ,      ") } "button [onclick]" #> SHtml.ajaxInvoke(process) } } 


рдФрд░ xml рдЯреЗрдореНрдкрд▓реЗрдЯ:

 <button lift="Snippet.button">  -   </button> 


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

рдзреВрдордХреЗрддреБ рд╕рдорд░реНрдерди


рд▓рд┐рдлреНрдЯ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдзреВрдордХреЗрддреБ рд╕рдорд░реНрдерди рд╣реИ, рдЬреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЧреМрд░рд╡ рд╣реИред рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рд░ 10 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдШрдбрд╝реА рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреНрдпрд╛ рд╣реЛрдЧрд╛:
 object Tick class Clock extends CometActor { Schedule.schedule(this, Tick, 10 seconds) def render = "#time *" #> now.toString override def lowPriority = { case Tick => val js = SetHtml("time", Text(now.toString)) partialUpdate(js) //  js-    Schedule.schedule(this, Tick, 10 seconds) //   } } 

рдЯреЗрдореНрдкрд▓реЗрдЯ
 <div lift="comet?type=Clock"> <span id="time"></span> </div> 

рдзреВрдордХреЗрддреБ рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╡рд┐рд▓рдВрдмрд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдЬреИрд╕реА рдЬрдЯрд┐рд▓ рдЪреАрдЬреЗрдВ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЖрд╡рд╢реНрдпрдХ рд╕рд╛рдордЧреНрд░реА рдкрд░, рдЖрдкрдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рд▓реЗрдЬрд╝реАрд▓рд╛рдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░реЗ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рд╛рдордЧреНрд░реА рдмрдирд╛рддрд╛ рд╣реИред
 <div lift="LazyLoad"> <div lift="Snippet.lazy_content"> -  ,     </div> </div> 

рдЯреБрдХрдбрд╝рд╛:
 def lazy_content = { Thread.sleep(3000) //    "div *" #> "   3    " } 


рдШрдирддреНрд╡


рдЬрдм рдЖрдк рд▓рд┐рдлреНрдЯ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк 2-3 рдЧреБрдирд╛ рдХрдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдкрдиреЗ рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЧрд░ рдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреНрд▓реЗ рд╕реЗ рд▓рд┐рдлреНрдЯ рддрдХ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛, рдЙрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЗрд╕реЗ 24k рд▓рд╛рдЗрдиреЗрдВ рд▓рдЧреАрдВ, рдФрд░ рд▓рд┐рдлреНрдЯ 6k рд▓рд┐рдВрдХ рдкрд░ ) ред рдФрд░ рдЕрдЧрд░ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ MVC / рд╕реНрдЯреНрд░рдЯреНрд╕ рдЬреИрд╕реЗ рдЪреМрдЦрдЯреЗ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрддрд░ рдФрд░ рднреА рдЕрдзрд┐рдХ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдХреЛрдб рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

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


рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдПрдХ рд▓реЗрдЦ рдореЗрдВ, рдЗрддрдиреЗ рдмрдбрд╝реЗ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЬреЛ рд▓реЛрдЧ рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:
Lifweb.net - рдореБрдЦреНрдп рд╕рд╛рдЗрдЯ
www.assembla.com/wiki/show/liftweb - рд╡рд┐рдХреА
expl.liftweb.net/onepage - рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рдкреБрд╕реНрддрдХ

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


All Articles