2012-04-25 18 views
7

Według Backbone.js stronie:Jak używać standardowego adresu URL w Backbone.Router?

do niedawna fragmenty hash (#page) zostały wykorzystane do świadczenia tych permalinks, ale wraz z nadejściem API Historia, to teraz można używać standardowych adresów URL (/ strona).

Próbowałem dodać tę regułę Router:

routes: { 
    'test': function() { 
    alert('ok'); } 
} 

i nazwał Backbone.history.start({pushState: true, root: '/myroot/'}). Mam łącze w moją stronę jak:

<a href="test">test me</a> 

I przechwycone zdarzenie click tego linku z:

$('a[href=test]').click(function(e) { 
    router.navigate('test'); 
    e.preventDefault(); }); 

Po kliknięciu na link, wniosek nie jest wykonany, co uważam, że przechwycenie było udało się. Ale zdarzenie nie zostanie wyzwolone.

Proszę, pomóżcie mi zrozumieć, jak działa ta History API. Lub wskaż, gdzie źle zrobiłem.

+1

Problem rozwiązany . Powinienem użyć 'router.navigate ('test', {trigger: true});' – davidshen84

Odpowiedz

12

Musisz włączyć pushState:

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

Twój link zmusi pełnego odświeżenia z serwera i serwer musi reagować z treścią tego adresu URL.

Trzeba przechwycić linkujące za kliknięcie i powiedzieć router, aby przejść do „test” szlaku:

myRouter.navigate("test");

Aby uzyskać więcej informacji na temat HTML5 historii API: http://diveintohtml5.info/history.html

jakiegoś intra Informacje na temat korzystania poziom pushState z Backbone:

http://lostechies.com/derickbailey/2011/09/26/seo-and-accessibility-with-html5-pushstate-part-1-introducing-pushstate/

http://lostechies.com/derickbailey/2011/09/26/seo-and-accessibility-with-html5-pushstate-part-2-progressive-enhancement-with-backbone-js/

A film z prezentacją dałem który obejmuje wszystko:

http://lostechies.com/derickbailey/2011/10/06/seo-and-accessibility-with-html5-pushstate-part-3-the-video/

nadzieję, że pomoże.

+0

Dzięki Derick. Zaktualizowałem swój kod, jak zauważyłeś. Ale nadal nie może działać. Zobacz zaktualizowane pytanie. – davidshen84

1

Musisz dodać {wyzwalacz: true} do wywołania nawigacji, aby rzeczywiście wywołać zdarzenia routingu.

0

Aby wskazać, że chcesz używać HTML5 pushState w swojej aplikacji, użyj Backbone.history.start({pushState: true}). Jeśli chcesz użyć usługi pushState, ale masz przeglądarki, które jej nie obsługują, zamiast tego użyj odświeżania pełnej strony, możesz dodać {hashChange: false} do opcji.

PS! Jeśli aplikacja nie jest serwowane od głównego adresu URL / swojej domenie, należy powiedzieć historii, w której korzeniem jest naprawdę, jako opcja (w przeciwnym razie nawigacja nie będzie działać!):

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