10 рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ Dojo рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

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

1. рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдФрд░ рдПрдПрдордбреА рдмреВрдЯрд▓реЛрдбрд░


рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб, рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреА рддрд░рд╣, рдЖрдХрд╛рд░ рдореЗрдВ рдмрдврд╝рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓рд░рд┐рдЯреА рд╡рд╣ рдХреБрдВрдЬреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддреА рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб, рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕рдордп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рджрд┐рди рдЕрддреАрдд рдореЗрдВ рд╣реИрдВред Dojo рдЯреВрд▓рдХрд┐рдЯ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП dojo.require рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреГрд╖реНрда рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

//  require  ,       //       ,       require( //     ["dojo/on", "dojo/touch", "dijit/form/Button", "dojo/domReady!"], // ,       , //        . //        ,      function(on, touch, Button) { //        . }); 


рдореЙрдбреНрдпреВрд▓ рдмрд╣реБрдд рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 //  'define'  'require' ,      define( //  ,     ["dojo/aspect", "dojo/_base/declare", "dijit/layout/BorderContainer"], //   ,     function(aspect, declare, BorderContainer) { //          //     (  ) return declare("mynamespace.layout.CustomBorderContainer", [BorderContainer], { //       . }); }); 


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

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

рдмрд╣реБрдЖрдпрд╛рдореА Dojo рдбрд╛рдЙрдирд▓реЛрдбрд░ рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рдХрд┐ DOM рддрддреНрдкрд░рддрд╛ рдкрд░рд┐рднрд╛рд╖рд╛ (dojo / domReady!) рдФрд░ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛рд░реНрдп (hasJS)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреВрдЯрд▓реЛрдбрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ рд╣реИ
рдмрд╛рд╣рд░реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рд╕реЗ:

 //     dojo/Deferred  define([ "./has", "./_base/lang", "./errors/CancelError", "./promise/Promise", "./has!config-deferredInstrumentation?./promise/instrumentation" ], function(has, lang, CancelError, Promise, instrumentation){ // ... }); 


Dojo рди рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдбрд░ рднреА рд╣реИред

2. рдбреЛрдЬреЛ / рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░


рдЬрдмрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╕рдЪреНрдЪреЗ рд╡рд░реНрдЧ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, Dojo Toolkit рдбреЛрдЬреЛ / рдШреЛрд╖рдгрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╡рд░реНрдЧ рдХреА рддрд░рд╣ рд╡рд┐рд░рд╛рд╕рдд рдкреИрдЯрд░реНрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдШреЛрд╖рдгрд╛ рдХреЛ рдПрдХ рдврд╛рдВрдЪреЗ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд░ рд╕рдХреЗрдВ:


Dojo рд╡рд░реНрдЧ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдбреЛрдЬреЛ / рдШреЛрд╖рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ:

 // ,    define    define([ //    dojo/declare "dojo/declare", //    ,     "dijit/form/Button", "dojo/on", "mynamespace/_MyButtonMixin" //      "_" ], function(declare, Button, on, _MyButtonMixin) { //    declare(),      return declare( //     .      "mynamespace.CustomButton", //     . //      . [ Button, _MyButtonMixin ], // , ,      ,  //        { myCustomProperty: true, value: "Hello!", myCustomMethod: function() { //  - ! }, methodThatOverridesParent: function(val) { this.myCustomMethod(val); //  "this.inherited(arguments)"   //       return this.inherited(arguments); } }); }); 


рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХрд┐рд╕реА рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд░рд╛рд╕рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдФрд░ рдЕрд╢реБрджреНрдзрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрдб рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

Dojo рд╡рд░реНрдЧ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИрдВред рдХрдХреНрд╖рд╛ рдмрдирд╛рдиреЗ рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

3. рдкрд╣рд▓реВ рдФрд░ "рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп"


рдкрд╣рд▓реВ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирдП рд░реБрдЭрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ ... рдФрд░ рдбреЛрдЬреЛ рдЯреВрд▓рдХрд┐рдЯ рдЙрдиреНрд╣реЗрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣рд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп: "рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ", "рдорд╛рдЙрд╕рдУрд╡рд░", "рдХреАрдк" - рдкрд╣рд▓реВ рдлрд╝рдВрдХреНрд╢рди рдП рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рдмрд╛рдж рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдмреА рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ!

рдЗрд╕ рддрд░рд╣ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдлрдВрдХреНрд╢рди рдЪрд▓рд╛рдирд╛:

 // after(,  ,  ,  ); aspect.after(myObject, "someMethod", function(arg1, arg2) { // ,       myObject.doSomething }, true); 


рджреВрд╕рд░реЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛рдирд╛ рднреА рдмрд┐рд▓реНрдХреБрд▓ рд╕рд░рд▓ рд╣реИ:
 aspect.before(myObject, "someMethod", function(arg1, arg2) { // ,       myObject.someMethod }); 


рдбрд┐рдЬрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рддреЗ рд╕рдордп рдкрд╣рд▓реВ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рдЬреЗрдЯ рдпрд╛ рдХрдХреНрд╖рд╛ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдиреЗ рд╕реЗ рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХрдИ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрдбрд╝реЗ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

 var self = this; aspect.after(this.submitButton, "onClick", function() { //       self.showAjaxSpinner(); }); 


4. рд╕реНрдердЧрд┐рдд рдФрд░ рдПрдХреАрдХреГрдд AJAX рдкрд░рд┐рд╡рд╣рди


рдбрд┐рдлреНрд░реЗрдбреНрд╕ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╡рд╕реНрддреБ-рдЙрдиреНрдореБрдЦ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдСрдкрд░реЗрд╢рди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рджреВрд╕рд░реЗ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред JQuery рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрдзрди рдореЗрдВ рд╕реЗ рдПрдХ Deferreds рдерд╛ред рд╕рдВрдпреЛрдЧ рд╕реЗ, Dojo рдЯреАрдо рдХрд╛ рдордВрддреНрд░ рд╣реИ "Dojo рдпрд╣ рдХрд┐рдпрд╛ред" Dojo рдЯреВрд▓рдХрд┐рдЯ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ Deferreds рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕рд░рд▓ рдФрд░ рдЬрдЯрд┐рд▓ AJAX рд╕рдВрдЪрд╛рд▓рди, рдПрдирд┐рдореЗрд╢рди рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде, Dojo рдиреЗ рдорд╛рдирдХ XMLHTTPRequest рдХреЗ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рдкреЗрд╢ рдХрд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдВрдбреЛ рдХреЗ рдирд╛рдо рд░реИрдкрд░, рдбреЛрдЬреЛ / io / iframe рдореЙрдбреНрдпреВрд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рддреЛ Dojo рдореЗрдВ рдХрдм рдЖрд╕реНрдердЧрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЬрдм рднреА рдХреЛрдИ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рд╣реИред рдПрдХреНрд╕рдПрдЪрдЖрд░ рдЕрдиреБрд░реЛрдзреЛрдВ, рдбреЛрдЬреЛ / рдЖрдИрдУ рдЕрдиреБрд░реЛрдзреЛрдВ, рдПрдирд┐рдореЗрд╢рди, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╕реЗ рдбреАрдлрд╝реНрд░реИрдбреНрд╕ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред

 //  XHR ,    Deferred var def = xhr.get({ url: "/getSomePage" }); //      def.then(function(result) { result.prop = 'Something more'; return result; }).then(function(resultObjWithProp) { // .... }).then(function() { // .... }); 


рдФрд░ dojo / io / iframe рдореЙрдбреНрдпреВрд▓ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ?

 require(["dojo/io/iframe"], function(ioIframe){ //   ioIframe.send({ form: "myform", url: "handler.php", handleAs: "json" }).then(function(data){ //    }, function(err){ //   }). then(function() { //    ! }) }); 


Dojo рдореЗрдВ Deferred рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ Deferred рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ API рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдПрдХреАрдХрд░рдг рдореЗрдВ рддреЗрдЬреА рдЖрдПрдЧреАред рд╕рдВрд╕реНрдХрд░рдг 1.8 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, Dojo / рдЕрдиреБрд░реЛрдз рдореЙрдбреНрдпреВрд▓ рдирдИ AJAX рд╕рдореЗрдХрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, Dojo рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ dojo / request рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 require(["dojo/request"], function(request){ request("request.html").then(function(response){ //  -     }, function(err){ //   }, function(evt){ //     }); }); 


рдПрдХреАрдХреГрдд рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдХреЛ рддреЗрдЬ рдФрд░ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред

5. рджреАрдЬреАрдд рдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ




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

рдпрд╣ рд▓реЗрдЖрдЙрдЯ, рдлрд╝реЙрд░реНрдо рдФрд░ рдЕрдиреНрдп рдЯреВрд▓ рдХрд╛ рдПрдХ рдЕрднреВрддрдкреВрд░реНрд╡ рд╕реЗрдЯ рд╣реИ:



рджреАрдЬреАрдд рдЖрдкрдХреЛ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рдШреЛрд╖рд┐рдд рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдШреЛрд╖рдгрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

 <div data-dojo-type="dijit.form.Button" data-dojo-props="label:'Click Me!'"></div> 


рд╡рд┐рдЬреЗрдЯ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрд░реАрдХрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 require(["dijit/form/Button"], function(Button) { //    var button = new Button({ label: 'Click Me!' }, "myNodeId"); }); 


рдХрдИ рджрд░реНрдЬрди рд╡рд┐рдЧреЗрдЯреНрд╕ рджрд┐рдЬреАрдд рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдХрдИ рджрд░реНрдЬрди рд╡рд┐рдЬреЗрдЯ рдбреЛрдЬреЛрдХреНрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╣реИрдВред Dojo UI рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╡рд┐рдЬреЗрдЯ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ JQuery UI, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред

6. рдбреЛрдЬреЛ рдореЛрдмрд╛рдЗрд▓




рд▓рдЧрднрдЧ рд╕рднреА рдЗрдВрдЯрд░рдиреЗрдЯ рдореБрджреНрджреЛрдВ рдХреА рддрд░рд╣, рдбреЛрдЬреЛ рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ - рдбреЛрдЬреЙрдХреНрд╕ / рдореЛрдмрд╛рдЗрд▓ рдиреЗрдорд╕реНрдкреЗрд╕ рдореЙрдбреНрдпреВрд▓ред

Dojo рдореЛрдмрд╛рдЗрд▓ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:



рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ рджреАрдЬреАрдд рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд╕рдорд╛рди рд╣реА рдШреЛрд╖рд┐рдд рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЛрдмрд╛рдЗрд▓ рд╕реНрдХреНрд░реАрди рдЖрд▓рд╕реА рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Dojox / mobile рдХреЗ рд▓рд┐рдП HTML рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╣реИ:

 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/> <meta name="apple-mobile-web-app-capable" content="yes" /> <title>  </title> <!--     --> <!--   dojo/javascript --> </head> <body> <!--    --> </body> </html> 


Dojox / mobile / deviceTheme рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдкрдпреБрдХреНрдд рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рд╖рдп рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ:

 require([ "dojox/mobile/ScrollableView", "dojox/mobile/Heading", "dojox/mobile/RoundRectList", "dojox/mobile/TabBar", "dojox/parser" ]); 


рд╕рднреА рдХреЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдЧреЗрдЯреНрд╕ рдФрд░ рд╕реНрдХреНрд░реАрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ:

 <!--    Dojo's TweetView: http://dojotoolkit.org/documentation/tutorials/1.7/mobile/tweetview/app/ --> <!--   --> <div id="tweets" data-dojo-type="dojox.mobile.ScrollableView" data-dojo-props="selected: true"> <h1 data-dojo-type="dojox.mobile.Heading"> <!--   --> <div data-dojo-type="dojox.mobile.ToolBarButton" data-dojo-props="icon: 'images/refresh.png'" class="mblDomButton tweetviewRefresh" style="float:right;"> </div> Tweets </h1> <ul data-dojo-type="dojox.mobile.RoundRectList"> <li data-dojo-type="dojox.mobile.ListItem"> Tweet </li> </ul> </div> <!--   --> <div id="mentions" data-dojo-type="dojox.mobile.ScrollableView"> <h1 data-dojo-type="dojox.mobile.Heading"> <!--   --> <div data-dojo-type="dojox.mobile.ToolBarButton" data-dojo-props="icon: 'images/refresh.png'" class="mblDomButton tweetviewRefresh" style="float:right;"> </div>  </h1> <ul data-dojo-type="dojox.mobile.RoundRectList"> <li data-dojo-type="dojox.mobile.ListItem"> Mention tweet </li> </ul> </div> <!--   --> <div id="settings" data-dojo-type="dojox.mobile.ScrollableView"> <h1 data-dojo-type="dojox.mobile.Heading">Settings</h1> <h2 data-dojo-type="dojox.mobile.RoundRectCategory">Show</h2> <ul data-dojo-type="dojox.mobile.RoundRectList"> <li data-dojo-type="dojox.mobile.ListItem">   . </li> </ul> </div> 


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

7. GFX рдФрд░ рдЪрд╛рд░реНрдЯ


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

Dojo GFX рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:



рдЖрдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рд╕реЗрдЯ рдмрдирд╛рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

 require(["dojox/gfx", "dojo/domReady"], function(gfx) { gfx.renderer = "canvas"; //  GFX  // : , ,  surface = gfx.createSurface("surfaceElement", 400, 400); //        curface.createCircle({ cx: 50, cy: 50, rx: 50, r: 25 }).setFill("blue"); //        hex  surface.createCircle({ cx: 300, cy: 300, rx: 50, r: 25 }).setFill("#f00"); //      surface.createRect({x: 180, y: 40, width: 200, height: 100 }). setFill({ type:"linear", x1: 0, y1: 0, //x: 0=>0,     x2: 0, //y: 0=>420,     y2: 420, colors: [ { offset: 0, color: "#003b80" }, { offset: 0.5, color: "#0072e5" }, { offset: 1, color: "#4ea1fc" } ] }); //      surface.createEllipse({ cx: 120, cy: 260, rx: 100, ry: 100 }).setFill({ type: "radial", cx: 150, cy: 200, colors: [ { offset: 0, color: "#4ea1fc" }, { offset: 0.5, color: "#0072e5" }, { offset: 1, color: "#003b80" } ] }); }); 


Dojo рдореЗрдВ Dojo GFX API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ dojox / рдЪрд╛рд░реНрдЯрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рд░реЗрдЦрд╛рдВрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рджреГрд╢реНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ рдФрд░ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рд╣реИ - рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦрдХрд░ рдкреВрд░реНрдг рдЪрд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

Dojox / charting рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдкрд╛рдИ рдЪрд╛рд░реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 <script> // x  y        //        chartData = [ { x: 1, y: 19021 }, { x: 1, y: 12837 }, { x: 1, y: 12378 }, { x: 1, y: 21882 }, { x: 1, y: 17654 }, { x: 1, y: 15833 }, { x: 1, y: 16122 } ]; require([ "dojo/parser", "dojox/charting/widget/Chart", "dojox/charting/themes/Claro", "dojox/charting/plot2d/Pie" ]); </script> <!--     --> <div data-dojo-type="dojox.charting.widget.Chart" data-dojo-props="theme:dojox.charting.themes.Claro" id="viewsChart" style="width: 550px; height: 550px;"> <!--    --> <div class="plot" name="default" type="Pie" radius="200" fontColor="#000" labelOffset="-20"></div> <!--    --> <div class="series" name="Last Week's Visits" array="chartData"></div> </div> 




рд╣рд╛рд▓рд╛рдБрдХрд┐ рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рдИ рдЪрд╛рд░реНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдбреЛрдЬреЛрдХреНрд╕ / рдЪрд╛рд░реНрдЯрд┐рдВрдЧ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рд╣реИ, рдмрд╣реБрдд рдЕрдзрд┐рдХред

8. SitePen рдЯреАрдо рд╕реЗ Dgrid




рдПрдХ Dojo рдХрдВрд╕рд▓реНрдЯреЗрдВрд╕реА рдХрдВрдкрдиреА, SitePen, Dojo рдХреЗ рд╕рд╣-рд╕рдВрд╕реНрдерд╛рдкрдХ Dylan Schiemann рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рдЗрд╕рдХреЗ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдиреЗ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдлреБрд▓реНрд▓рд┐рдд рдФрд░ рдЕрдирд╛рдбрд╝реА рдбреЛрдЬреЛ / рдЧреНрд░рд┐рдб рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЕрдВрддрддрдГ рдПрдХ рдбреНрд░рдЧрд┐рдб рдмрдирд╛рдпрд╛ред

рдкрд░рд┐рдгрд╛рдореА рдкреИрдХреЗрдЬ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:



рд╕рд╛рдЗрдЯрдкреЗрди рдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдбреНрд░рдЧрд┐рдб рдШрдЯрдХ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╕рдВрдкрдиреНрди рдЯреЗрдмрд▓ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рд╣реИред

9. рдбреАрдУрдПрдЪ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ


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

 //      ,      dojo.provide("my.test.module"); //   doh.register("MyTests", [ //      function assertTrueTest(){ doh.assertTrue(true); doh.assertTrue(1); doh.assertTrue(!false); }, // ...    : name, setUp, tearDown, and runTest { name: "thingerTest", setUp: function(){ this.thingerToTest = new Thinger(); this.thingerToTest.doStuffToInit(); }, runTest: function(){ doh.assertEqual("blah", this.thingerToTest.blahProp); doh.assertFalse(this.thingerToTest.falseProp); // ... }, tearDown: function(){ } }, // ... ]); 


рдЙрдкрд░реЛрдХреНрдд рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛, рдЕрд░реНрдерд╛рддреНред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрд░рд┐рдпрд╛рдПрдВ? рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг AJAX, рдПрдиреАрдореЗрд╢рди рдФрд░ рдЕрдиреНрдп рд▓рдВрдмрд┐рдд рдХрд╛рд░реНрдп рд╣реИрдВред DOH рдбреАрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

 { name: "Testing deferred interaction", timeout: 5000, runTest: function() { var deferred = new doh.Deferred(); myWidget.doAjaxAction().then(deferred.getTestCallback(function(){ doh.assertTrue(true); }); return deferred; } } 


рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, "doTestCallback" рдлрд╝рдВрдХреНрд╢рди рдХреЛ "doAjaxAction" рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдПрдЧрд╛ред

рдмрд╛рдж рдХреЗ рдкрд░реАрдХреНрд╖рдг doh.Deferred рдХреЗ рд╣рд▓ рд╣реЛрдиреЗ рддрдХ рдирд╣реАрдВ рдЪрд▓реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдШрдбрд╝реА рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ рдФрд░ рдУрд╡рд░рд▓реИрдкрд┐рдВрдЧ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдбреАрдУрдПрдЪ рдЕрдиреНрдп рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдкрд░реАрдХреНрд╖рдг рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдбреАрдУрдПрдЪ рдПрдХ рдЬрд╛рд╡рд╛ рд░реЛрдмреЛрдЯ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдФрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдорд╛рдЙрд╕ рдФрд░ рдХреАрдмреЛрд░реНрдб рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╣реЛрдорд░ рд╕рд┐рдореНрдкрд╕рди рдХреЛ рдЪрд┐рд▓реНрд▓рд╛рддреЗ рд╣реБрдП рдХрд╣рддреЗ рд╣реИрдВ, "рд╡рд╛рд╣реЛ!" рддреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рднрдпрд╛рдирдХ "рдбреАрдУрдПрдЪ!" рд╕реБрдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

10. рджреЛрдЬреЛ рдмрд┐рд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕


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

Dojo рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдкрд╛рд░реНрд╕ рдШреЛрд╖рд┐рдд рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред Dojo рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╣рддреЗ рд╣реИрдВред рдирд┐рд░реНрдорд┐рдд рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдИ рдкрд░рддреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдиреАрдЪреЗ рджреА рдЧрдИ рдорд┐рд╕рд╛рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░реЛрдлрд╛рдЗрд▓ рджрд┐рдЦрд╛рддреА рд╣реИ:

 var profile = { releaseDir: "/path/to/releaseDir", basePath: "..", action: "release", cssOptimize: "comments", mini: true, optimize: "closure", layerOptimize: "closure", stripConsole: "all", selectorEngine: "acme", layers: { "dojo/dojo": { include: [ "dojo/dojo", "app/main" ], customBase: true, boot: true } }, resourceTags: { amd: function (filename, mid) { return /\.js$/.test(filename); } } }; 


Dojo рдмрд┐рд▓реНрдб рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:



рдирд┐рд░реНрдорд┐рдд рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди (рд╣рд╛рд▓ рд╣реА рдореЗрдВ Node.js рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рдХ рдпрд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг:

 ./build.sh --profile /path/to/app/app.profile.js --require /path/to/app/boot.js 


Dojo рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреАрдврд╝реА рдкрд░ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдорд╛рддреНрд░рд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреА рд╣реИред рдиреНрдпреВрдирддрдо рдФрд░ рд╕реНрддрд░рд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ CSS рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдкрдХрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ!

11. рдмреЛрдирд╕! рджреЛрдЬреЛ рдЦрдЬрд╛рдирд╛ред рдЕрдзрд┐рдХ рдбреЛрдЬреЛрдХреНрд╕


Dojox Mobile рдФрд░ GFX: рджреЛ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг Dojox рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ Dojo рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрдИ рдЫрд┐рдкреЗ рд╣реБрдП рдЦрдЬрд╛рдиреЗ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рд╣реИрдВред рдЗрди рдЦрдЬрд╛рдиреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:



рдФрд░ рдпрд╣ рднреА Dojo рдХреЗ рдХрдИ рдЧреБрдгреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

Dojo Toolkit JavaScript:


, Dojo. , Dojo (, , XHR ) -.

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


All Articles