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

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

рдЕрдм, рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЯрд┐рдкрдХрд╛рдХреБрд▓рд░ рдбреЗрдореЛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐
рдлреЛрдирдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЯрд┐рдкрдХреИрд▓рдХреБрд▓рд░ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░реАрди рд╣реЛрддреА рд╣реИ, рдпрд╣ рдХрд╛рдо рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рдЖрд╡реЗрджрди рдПрдХ рдЯрд┐рдк рдЧрдгрдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╕реНрд░реЛрдд рдХреЛрдб
GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ , рдФрд░ рдЖрдк рдЗрд╕реЗ
рдСрдирд▓рд╛рдЗрди рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ HTML5 рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдкреЗрдЬ рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИред рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ
index.html рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдореЗрдЯрд╛ рдЯреИрдЧ рдФрд░ рдЕрдиреНрдп рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдлрд╝рд╛рдЗрд▓реЗрдВ рдХреИрд╕реЗ рдЬреБрдбрд╝реА рд╣реИрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ
<link rel="dx-template" type="text/html" href="views/home.html" />
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХрд▓ рдкреГрд╖реНрда рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рднреА HTML рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдПрдХ рд▓рдВрдмреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЖрд╡реЗрджрди рдХреЗ рдЕрдкрдШрдЯрди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдХреЗ рдЪрд░рдгреЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
Index.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ,
TipCalculator рдирд╛рдо рд╕реНрдерд╛рди рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
TipCalculator.app = new DevExpress.framework.html.HtmlApplication(...)
рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЗрдЖрдЙрдЯ рдкреНрд░рдХрд╛рд░ рдмрддрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрднрд╡ рд╣реИ - рдЦрд╛рд▓реА рд▓реЗрдЖрдЙрдЯ, рд▓реЗрдХрд┐рди рдиреЗрд╡рд┐рдЧреЗрд╢рди рдмрд╛рд░ рдФрд░ рдкрд╛рд░реНрд╢реНрд╡ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдЬреЛ рдЖрдЬ рдЗрддрдирд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред

рдпрд╣рд╛рдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред PhoneJS рдореЗрдВ, рд╣рдордиреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рд╕рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ (рд╡рд┐рдЪрд╛рд░реЛрдВ, рд╕реНрдХреНрд░реАрди) рдХреЗ рдкрд░рд┐рдЪрд┐рдд, рд╕рд┐рджреНрдз рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬреНрдЮрд╛рдд рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ рдХрдИ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ (рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕, ASP.NET MVC рдФрд░ рдХрдИ PHP рд▓рд╛рдЗрдмреНрд░реЗрд░реА) рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдк
рд╣рдорд╛рд░реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджреГрд╢реНрдп рдФрд░ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ
рдкрдврд╝ рд╕рдХрддреЗ
рд╣реИрдВ ред
рд░реВрдЯрд┐рдВрдЧ рднреА рд╣реИ:
TipCalculator.app.router.register(":view", { view: "home" });
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдПрдХ рд╕рд░рд▓ рдорд╛рд░реНрдЧ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдкрддрд╛ рдмрд╛рд░ (рдпрд╛ рдмрд▓реНрдХрд┐, рд╣реИрд╢ рдЦрдВрдб рд╕реЗ) рд╡рд░реНрддрдорд╛рди рд╕реНрдХреНрд░реАрди (рджреГрд╢реНрдп) рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ "рд╣реЛрдо" рд╕реНрдХреНрд░реАрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдореЙрдбрд▓ рджреЗрдЦреЗрдВ
рд╡рд┐рдЪрд╛рд░реЛрдВ / home.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣реЛрдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯрд┐рдкрдХрд╛рдХреБрд▓рд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рд╡реНрдпреВ-рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИ
TipCalculator.home = function(params) { . . . };
рддреАрди рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
billTotal
рдХреА рд░рд╛рд╢рд┐ (
billTotal
), рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (
splitNum
) рдФрд░ рдЗрдирд╛рдо рдХрд╛ рдЖрдХрд╛рд░ (
tipPercent
)ред рдЙрдиреНрд╣реЗрдВ
рдЕрд╡рд▓реЛрдХрдиреАрдп рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
рд╣реИ рддрд╛рдХрд┐ рд╡реЗ UI рдШрдЯрдХреЛрдВ рдФрд░ рдЯреНрд░реИрдХ рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛ рд╕рдХреЗрдВред
var billTotal = ko.observable(), tipPercent = ko.observable(DEFAULT_TIP_PERCENT), splitNum = ko.observable(1);
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, 4 рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ:
totalToPay
,
totalPerPerson
,
totalTip
рдФрд░
tipPerPerson
ред рд╕рднреА рдЪрд╛рд░
рдЕрд╡рд▓реЛрдХрдиреАрдп (рдпрд╛ рд╕рдВрдЧрдгрд┐рдд) рдирд┐рд░реНрднрд░ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд, рдЬрдм рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
var totalTip = ko.computed(...); var tipPerPerson = ko.computed(...); var totalPerPerson = ko.computed(...); var totalToPay = ko.computed(...);
рдЕрдВрддрд┐рдо рд░рд╛рд╢рд┐ рдЖрдорддреМрд░ рдкрд░ рдЧреЛрд▓ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рджреЛ рдХрд╛рд░реНрдп
roundUp
рдФрд░
roundDown
, рдЬреЛ
roundDown
рдХреЗ рдореВрд▓реНрдп рдХреЛ
roundMode
ред рдЗрд╕рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕рдХреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХреБрд▓
totalToPay
рдХреА рдПрдХ
totalToPay
рд╣реИ:
var totalToPay = ko.computed(function() { var value = totalTip() + billTotalAsNumber(); switch(roundMode()) { case ROUND_DOWN: if(Math.floor(value) >= billTotalAsNumber()) return Math.floor(value); return value; case ROUND_UP: return Math.ceil(value); default: return value; } });
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рд░рд╛рдЙрдВрдбрд┐рдВрдЧ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП,
subscribe
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЙрдирдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ:
billTotal.subscribe(function() { roundMode(ROUND_NONE); }); tipPercent.subscribe(function() { roundMode(ROUND_NONE); }); splitNum.subscribe(function() { roundMode(ROUND_NONE); });
рджреГрд╢реНрдп рдореЙрдбрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрди рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреЙрдХрдЖрдЙрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдФрд░ рдЬреЛ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдкрдиреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣реИред
рд░рд╛рдп
рдЖрдЗрдП HTML рдорд╛рд░реНрдХрдЕрдк рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН
рд╡рд┐рдЪрд╛рд░ / home.html рдлрд╝рд╛рдЗрд▓ ред рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░, рджреЛ рд╡рд┐рд╢реЗрд╖ div рддрддреНрд╡ рд╣реИрдВ: "рд╣реЛрдо" рдирд╛рдо рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП, "рд╕рд╛рдордЧреНрд░реА" рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрдЕрдк рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
<div data-options="dxView : { name: 'home' }"> <div data-options="dxContent : { targetPlaceholder: 'content' }"> . . . </div> </div>
рдЕрдВрджрд░ рдПрдХ рдЯреВрд▓рдмрд╛рд░ рд╣реИ:
<div data-bind="dxToolbar: { items: [ { align: 'center', text: 'Tip Calculator' } ] }"></div>
dxToolbar
рдХрд╛ рдПрдХ рд╡рд┐рдЬреЗрдЯ рд╣реИред рдЗрд╕рдХрд╛ рдорд╛рд░реНрдХрдЕрдк рд╡рд┐рд╡рд░рдг рдиреЙрдХрдЖрдЙрдЯ рдмрдВрдзрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдлреАрд▓реНрдб рд╕реЗрдЯ рдиреАрдЪреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, CSS рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд
dx-fieldset
рдФрд░
dx-field
рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддрд┐рд╢рдд рдФрд░ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд░рд╛рд╢рд┐ рдФрд░ рджреЛ рд╕реНрд▓рд╛рдЗрдбрд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдВрджрд░:
<div data-bind="dxNumberBox: { value: billTotal, placeholder: 'Type here...', valueUpdateEvent: 'keyup', min: 0 }"> </div> <div data-bind="dxSlider: { min: 0, max: 25, step: 1, activeStateEnabled: true, value: tipPercent }"></div> <div data-bind="dxSlider: { min: 1, step: 1, max: 10, activeStateEnabled: true, value: splitNum }"></div>
рдЕрдЧрд▓рд╛, рджреЛ рдмрдЯрди (
dxButton
) рдХреБрд▓ рд░рд╛рд╢рд┐ рдХреЛ рдЧреЛрд▓ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
<div class="round-buttons"> <div data-bind="dxButton: { text: 'Round Down', clickAction: roundDown }"></div> <div data-bind="dxButton: { text: 'Round Up', clickAction: roundUp }"></div> </div> <div id="results" class="dx-fieldset"> <div class="dx-field"> <span class="dx-field-label">Total to pay</span> <span class="dx-field-value" style="font-weight: bold" data-bind="text: Globalize.format(totalToPay(), 'c')"></span> </div> <div class="dx-field"> <span class="dx-field-label">Total per person</span> <span class="dx-field-value" data-bind="text: Globalize.format(totalPerPerson(), 'c')"></span> </div> <div class="dx-field"> <span class="dx-field-label">Total tip</span> <span class="dx-field-value" data-bind="text: Globalize.format(totalTip(), 'c')"></span> </div> <div class="dx-field"> <span class="dx-field-label">Tip per person</span> <span class="dx-field-value" data-bind="text: Globalize.format(tipPerPerson(), 'c')"></span> </div> </div>
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде, рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреМрд╢рд▓ рдХреЗ рд╕рд╛рде рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЛрдирдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛрддрд╛ рд╣реИред рдиреНрдпреВрдирддрдо рдХреЛрдб, рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрд╕рд╛рдиреАред
рдмрд╛рдЬрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдкреИрдХреЗрдЬрд┐рдВрдЧ
HTML5 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рд╕реНрд░реЛрдд рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рд╡реЗрдм рд╕рд░реНрд╡рд░ (Apache, IIS, nginx рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ URL рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рд╡рд╛рдЗрд╕ рдПрдореБрд▓реЗрдЯрд░ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рдЪ рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдПрдЬреЗрдВрдЯ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдпрд╛ рдЯреИрдмрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред

рдПрдХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдХрд▓реНрдк
рд░рд┐рдкреНрдкрд▓ рдПрдореБрд▓реЗрдЯрд░ рд╣реИ , рдЬреЛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдо рдмрд╛рдЬрд╛рд░реЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ (AppStore, Google Play рдФрд░ Windows Store) рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдмреЗрд╢рдХ, рдЖрдкрдХреЛ Apple, Google рдФрд░ Microsoft рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рджреБрдХрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
PhoneGap рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдлреЛрдирдЧреИрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдПрд╕рдбреАрдХреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдкреАрдХреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХреНрд▓рд┐рдкреНрд╕ рдореЗрдВ рдПрдХ рдлреЛрдирдЧреИрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдореИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЬреЛ рд╣рдореЗрдВ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдПрд╕рдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ
рдлреЛрдирдЧреИрдк рдмрд┐рд▓реНрдб рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреЛ рдЖрдкрдХреЛ рдореБрдлреНрдд рдореЗрдВ рдПрдХ рдЖрд╡реЗрджрди рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЦрд╛рддрд╛ рдЦрд░реАрджрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдлреЛрдирдЧреИрдк рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рд╣реА рдХреНрд▓рд┐рдХ рдореЗрдВ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛ рдХреБрдЫ рднреА рд░рд╣рддрд╛ рд╣реИ рд╡рд╣ рд╡рд┐рд╡рд░рдг, рдкреНрд░рдЪрд╛рд░ рд╕рд╛рдордЧреНрд░реА, рдЪрд┐рддреНрд░, рдЖрдЗрдХрди рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред
рдорд░рд╣рдо рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╕реА рдордХреНрдЦреА: рдЖрдЬ PhoneGap Build Windows Phone 8 рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╡реЗ рдЗрд╕ рд╕рд╛рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ), рдФрд░ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ PhoneGap рд╡рд┐рддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ Windows Phone SDK рдФрд░ CordovaWP8App рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреБрдЗрдбреЛ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдЙрддреНрдкрд╛рдж
DXTREME рдореЛрдмрд╛рдЗрд▓ (рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ PhoneJS рд╕рд╣рд┐рдд) рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рд╕реАрдзреЗ iOS, Android рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди 8 рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рддреЛ PhoneGap + PhoneJS - рдЖрдк рд╕рднреА рдХреЛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
PhoneGap рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреНрд╖рдорддрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЗрд╢реА рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
PhoneJS рд╕рд┐рдВрдЧрд▓-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо UI рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд░реНрд╢-рдЕрдиреБрдХреВрд▓рд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд▓рдЪреАрд▓реЗ рд╕реНрдХреНрд░реЙрд▓, "рдЕрдВрддрд╣реАрди рд▓реЛрдбрд┐рдВрдЧ" рдФрд░ "рдкреБрд▓ рдбрд╛рдЙрди рдЯреВ рд░рд┐рдлреНрд░реЗрд╢" рдЬреЗрд╕реНрдЪрд░, рдСрди / рдСрдл рд╕реНрд╡рд┐рдЪ, рд╡рд┐рднрд┐рдиреНрди рдмрдЯрди рдФрд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб, рдЧреИрд▓рд░реА, рдореИрдкреНрд╕ рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди - рдпрд╣ рд╕рдм рдлреЛрдирдЬреЗрдПрд╕ рдореЗрдВ рд╣реИред
рдХрд┐рдЪрди рд╕рд┐рдВрдХ рдбреЗрдореЛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
рд╕рднреА рд╡рд┐рдЬреЗрдЯ рджреЛ рдореЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЬреИрд╕реЗ рдиреЙрдХрдЖрдЙрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ:
<div data-bind="dxCheckbox: {checked: checked} "></div> <script> var myViewModel= { checked: true }; ko.applyBindings(myViewModel); </script>
рдФрд░ рдПрдХ jQuery рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ:
<div id="checkboxContainer" ></div> <script> $(function() { $("#checkboxContainer").dxCheckbox({ checked: true }); }); </script>
рдкрд╛рдардХ рдХреЗ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рдкреНрд░рд╢реНрди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реБрдП, рдХреНрдпреЛрдВ PhoneJS рдмреЗрд╣рддрд░ / рдмрджрддрд░ рд╣реИ / рдореМрдЬреВрджрд╛ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рд╣рдордиреЗ
рдкреНрд░реЙрдкрд░реНрдЯреАрдХреНрд░реЙрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреИрдпрд╛рд░
рдХрд┐рдпрд╛ рд╣реИ ред рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдореМрдЬреВрджрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИред
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
PhoneJS рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рддрд░рдг рдПрдХ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рд╣реИ, рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░, рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╡реЗрдм рд╕рд░реНрд╡рд░, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХреЛ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред PhoneJS
рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб
рдХрд░реЗрдВ ред
PS
PhoneJS рдЧреИрд░-рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд┐рдГрд╢реБрд▓реНрдХ рд╣реИ ред рдФрд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдЯреАрдо рдЖрдкрдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред