2012-01-29 17 views
7

Czy jest jakiś sposób, jak połączyć hash i non-hash adresów URL w aplikacji backbone.js?Kombajny hash i non-hash URL w backbone.js

Ustawiono Backbone.history.start({pushState: true}). Kiedy użytkownik kliknie na jakiś link, pobieram dane JSON z serwera, aktualizuję stronę i dzwonię pod numer Backbone.history.navigate, aby zmienić adres URL przeglądarki (na przykład z example.com/zlinsky/kampan/mf/ na example.com/moravskoslezsky/kampan/mf/).
Jeśli użytkownik skopiuje adres URL z przeglądarki i otworzy w drugiej zakładce, zobaczy tę samą stronę (więc każda strona zaktualizowana w ten sposób ma odpowiednią stronę na serwerze). Właśnie tego chcę.

Ale teraz mam problem ...

Mam kilka <select> na stronie też. Kiedy użytkownik zmienia w nich wartość, wprowadzam dynamiczne zmiany na stronie (bez pobierania JSON z serwera, aktualizacje są wykonywane tylko po stronie klienta). Chciałbym zmienić adresy URL zgodnie z <select>, na przykład na example.com/moravskoslezsky/kampan/mf/#state1 (tak, gdy ktoś wyśle ​​ten URL, druga strona zobaczy tę samą stronę, w tym samym stanie, co nadawca).

Nie mogłem znaleźć sposobu, jak to zrobić w Backbone.js. Jeśli ustawię pushState: true na Backbone.history, Router ignoruj ​​znaczniki hash.
Jeśli ustawię pushState: false, nie jestem w stanie ustawić adresów URL, jak opisuję w pierwszym akapicie powyżej.

Dziękuję za podpowiedź.

+0

byłaś w stanie rozwiązać ten problem? Mam dokładnie ten sam problem. gdy parametr pushState ma wartość true, nie mam adresów URL zawierających fragmenty hash; hash jest całkowicie ignorowany. – Fedor

Odpowiedz

2

Można zadzwonić: Backbone.history.navigate("/foo/bar#fragment")

Ale nie sądzę, że to dobry pomysł, bo to znaczy nie obsługuje pushState, więc kręgosłup będzie używać skrótu adresy URL huk (w IE).

Być może można użyć querystrings: Backbone.history.navigate("/foo/bar?foo=bar", true) które będą w nowoczesnych przeglądarek: http://domain.tld/foo/bar?foo=bar oraz w IE: http://domain.tld#/foo/bar?foo=bar