рдЧреНрд░реЗрд▓реНрд╕, jQuery, AJAX: рдПрдВрдХрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ 2, рдЕрдВрддрд┐рдо

рдкреВрд░реНрдг рдФрд░ рдЕрдкреВрд░реНрдг рдкреГрд╖реНрда



рд╣рдо рдПрдВрдХрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдЧреНрд░реЗрд▓реНрд╕ рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдирд╛ рд╣реИред



рдПрдХ-рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реИред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреГрд╖реНрда рдХреЛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг (рд╣реЗрдбрд░, рдиреЗрд╡рд┐рдЧреЗрд╢рди, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ (AJAX рдХреЙрд▓ рдХреЗ рд▓рд┐рдП) рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЯрд╛рдЗрдкрд┐рдВрдЧ / рдорд╛рдп-рдРрдк / рдбреВ / рд░рд╕реАрджреЗрдВ , рд╣рдореЗрдВ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рддреА рд╣реИрдВред рдЕрдм рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдКрдкреНрд╕! рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рдкреГрд╖реНрда рдореБрдЦреНрдп рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:



grails-app/conf/PartialPageLoadFilters.groovy





  def filters = { partial(controller: "*", action: "*") { before = { //  AJAX-? if (request.xhr) { //     . request.partialPage = true } true } } }
      
      





рдореИрдВ рдЬрд╛рджреВ рд╡рд┐рд╢реЗрд╖рддрд╛ request.xhr рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рдЧреНрд░реЗрд▓реНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ HTTP-Header рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЗрд╕рдХреА рд╕реВрдЪрдирд╛ рджреЗрддреЗ рд╣реИрдВред рдКрдкрд░, рдореИрдВрдиреЗ рдЕрднреА рд╕рднреА AJAX рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ "рдЖрдВрддрд░рд┐рдХ" рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред



рдЕрдм рдореИрдВ рд╣рд░ рдЬрдЧрд╣ request.partialPage рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдк рдЖрдВрддрд░рд┐рдХ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдореБрдЦреНрдп рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдХреЗрд╡рд▓ рдРрд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╡рдХреВрдл рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛:



grails-app/views/layouts/main.gsp





 %{--   --}% <g:if test="${request.partialPage}"> <g:layoutBody /> </g:if> <g:else> %{--    --}% <html> <head> ... </head> <body> ... <div id="pageContent"> <g:layoutBody /> </div> ... </body> </html> </g:else>
      
      





рд╣рдордиреЗ рдкреВрд░реНрдг рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ (рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдЬреАрдПрд╕рдкреА рдХреЗ рд▓рд┐рдП) рд╣рд╛рд╕рд┐рд▓ рдХреА, рдЬрд┐рд╕рдореЗрдВ рдкреЗрдЬ рдХреЗ рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдП рдЧрдП рдереЗред



рдмреБрдХрдорд╛рд░реНрдХ рдФрд░ рдЗрддрд┐рд╣рд╛рд╕



рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ AJAX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреАрди рд╕реНрдХреНрд░реАрди рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

/ my-app / # do / рдкреНрд░рд╛рдкреНрддрд┐рдпрд╛рдВ / my-app / # do / buy / my-app / # do / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛


рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╣рдорд╛рд░реЗ "рдЧрддрд┐рд╢реАрд▓" рд▓рд┐рдВрдХ рдХреЛ рдмреБрдХрдорд╛рд░реНрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рдПрдХ рдПрдВрдХрд░ рдкреВрдВрдЫ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ URL рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рд╕рд░реНрд╡рд░ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдкреЗрдЬ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╣реИрдВред



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



web-app/js/application.js





 $.ready(function() { $('#pageContent').html('...') .load(buildURL(document.location.hash), function() { //   updateNavLinks(); }); });
      
      





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



рд▓реЗрдХрд┐рди рдХрд╣рд╛рдиреА рдХрд╛ рдХреНрдпрд╛? рдмреИрдХ / рдлрд╝реЙрд░рд╡рд░реНрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдкрд░, рд╣рдорд╛рд░реА $ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдШрдЯрдирд╛ рдореЗрдВ рдЖрдЧ рдирд╣реАрдВ рд▓рдЧреЗрдЧреАред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЛ рдПрдХ "рдПрдВрдХрд░" рд╕реЗ рджреВрд╕рд░реЗ рдПрдВрдХрд░ рддрдХ рдорд╛рдирддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдкреГрд╖реНрда рдХреЛ рдХреЗрд╡рд▓ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ред рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рди рдпреЛрдЧреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рдХрд░реЗрдВ?



рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ (рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХрд╛рдлреА рдХреНрд░реВрд░) рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ document.location.hash рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдЕрдЪрд╛рдирдХ рд╡рд░реНрддрдорд╛рди рдПрдВрдХрд░ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреГрд╖реНрда рдХреЗ рдЕрдВрджрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



 function checkLocalState() { if (document.location.hash && document.location.hash != currentState) { currentState = document.location.hash; $('#pageContent').html(' , ...') .load(buildURL(currentState), function() { //   updateNavLinks(); }); } }
      
      





рдЕрдм рд╣рд░ 500 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд▓рдВрдЧрд░ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:



 $.ready(function() { setInterval(checkLocalState, 500); });
      
      





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



рд╕рд╛рд░рд╛рдВрд╢



рд╣рдордиреЗ AJAX рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рд╕рд╛рде Grails + jQuery рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛ рд╣реИ, рдЬреЛ:

  1. рдкреВрд░реЗ рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдкреГрд╖реНрда рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреБрди: рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред
  2. рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рдкреГрд╖реНрда рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдмреБрдХрдорд╛рд░реНрдХ рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
  3. рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреАрдЫреЗ / рдЖрдЧреЗ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред
  4. рдЦреЗрд▓ рдХреЗ рдирдП рдирд┐рдпрдореЛрдВ рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реБрдП рдмрд┐рдирд╛, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреЛрдб "рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ" рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рд╕рднреА рдкреГрд╖реНрда рд▓реЛрдбрд┐рдВрдЧ рддрд░реНрдХ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА (рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рдЬреАрдПрд╕рдкреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
  5. рд▓рд┐рдВрдХ рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЛрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
  6. рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ URL рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрд╛рдЙрдВрдб рд╕рд╛рдЗрди ( # ) рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдВрдХ рдирд┐рдпрдорд┐рдд рд▓рд┐рдВрдХ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИрдВ ! рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдордиреЗ рдзреНрдпрд╛рди рд╕реЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рднреА рддрд░реНрдХ рдХреЛ jQuery-рдХреЛрдб рдореЗрдВ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ред


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



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

  1. http://yensdesign.com/2008/11/creating-ajax-websites-based-on-anchor-navigation/
  2. GWT рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ - рдкреНрд░рдмрдВрдз рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рд╣рд╛рдЗрдкрд░рд▓рд┐рдВрдХ



All Articles