Backbone.js рдФрд░ рд╣реИрд╢ рдХреЗ рдмрд┐рдирд╛ рдорд╛рд░реНрдЧреЛрдВ

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

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

<a href="http://myapp.com/catalog/#action1"> - </a>

рдпрд╛ рднреА

<a href="http://myapp.com/catalog/#action1/42"> - </a>

рдФрд░ рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдмрджрд▓реЗ рдореЗрдВ, рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░, рдмрд╛рдж рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реБрдП, рддреБрд░рдВрдд рдЙрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЗрд╕ рд╕рднреА рднрд╡реНрдпрддрд╛ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд┐рдВрджреБ рдкреНрд░рддреАрдХ "#" (рдкрд╛рдЙрдВрдб рд╕рд╛рдЗрди) рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдмреБрд░рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкрдардиреАрдпрддрд╛ рдФрд░ "рд╕реБрдВрджрд░рддрд╛" (рдХрд┐рд╕реА рдФрд░ рдиреЗ рдореБрдЭреЗ рдкрд┐рдЫрд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рд░реЗрд╕реНрдЯрдлреБрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрддрд╛рдпрд╛) рдиреЗ URL рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ред

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

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди (рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ StackOverflow) рдмрд╕ рд╣рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ: "рдХреНрдпрд╛ рдЖрдк рдмрд┐рдирд╛ рд╣реИрд╢ рдХреЗ рд░реВрдЯрд┐рдВрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рдРрд╕рд╛ рдХрд░реЗрдВ: "

Backbone.history.start({pushState: true})

рдмреЗрд╢рдХ, рдЬреИрд╕реЗ рд╣реА рд╣рдо рдЕрдкрдиреЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рдкреБрд╢рд╕реНрдЯреЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрд╣ рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИ:
  1. рдЕрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ URL рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЦреБрдж рдкрддрд╛ рд╣реИ, рдФрд░ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмреИрдХрдмреЛрди рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдирд╛рдо рд╣реИ (рдЗрд╕рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдбреЛрдореЗрди рдирд╛рдо рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЗрд╕ рдирд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ);
  2. рдпрджрд┐ рд▓рд┐рдВрдХ рдмрд┐рдирд╛ рд╣реИрд╢ рдХреЗ URL рдХреЗ рд╕рд╛рде href рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдмрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рдЬрд╛рдПрдВ (рдЬреЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдорддрд▓рдм рд╣реИ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рдкреВрд░реНрдг рдкреБрдирд░рд╛рд░рдВрдн)ред

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

Backbone.history.start({pushState: true, root: "/catalog"})

рдЕрдм рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

<a href="http://myapp.com/catalog/action1/42"> - </a>

рд▓реЗрдХрд┐рди рдЬрдмрдХрд┐ рдкреЗрдЬ рдЕрднреА рднреА рдкреБрдирдГ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЖрдЧреЗ рдкрдврд╝рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЛ рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

<a onclick="Router.navigate("http://myapp.com/catalog/action1/42", {trigger: true} )" href="javascript:"> - </a>

рдпрд╛рдиреА рдЕрдм рд╣рдо рд╣рд░ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рд░рд╛рдЙрдЯрд░ рдХреЛ рдЕрднреА рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ URL рдирд╣реАрдВ рдмрджрд▓рд╛)ред

рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓рд┐рдВрдХ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рд▓рд┐рдВрдХ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕реЗ рд╣рдо рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдИрдбреА = "рдмреИрдХрдмреЛрди" рдХреЗ рд╕рд╛рде рд╕рднреА рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдСрдирдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди (рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдкрд░ рдЬреЛрд░ рдирд╣реАрдВ рджреЗрддрд╛):

<a id="barebone" href="/catalog/action1/42"> - </a>

рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ URL рдХреЛ рдЕрднреА рднреА рд╕рдВрдХреЗрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рди рдХрд┐ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ "рдПрдХреНрд╢рди 1/42") рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛ рд░рд╣рд╛ рд╣реВрдБред рдареАрдХ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рд╣реА (jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ):

var fRouterLinks = function()
{
$("#barebone").click(function(){
Router.navigate($(this).attr("href"), {trigger: true, replace: true} );
return false;
});
}

рд╡рд╣ рд╕рдм рд╣реИред рд╕реБрдВрджрд░ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛рдлреА рдкреНрд░рд╛рдердорд┐рдХ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╡рд┐рдЦрдВрдбрди рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд┐рдЦрд╛ред

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


All Articles