2012-01-29 10 views
7

C'è qualche modo come combinare hash e non hash URL in applicazione Backbone.js?Unire hash e non hash URL in Backbone.js

Ho impostato Backbone.history.start({pushState: true}). Quando l'utente fa clic su un collegamento, recupero i dati JSON dal server, aggiorna la pagina e chiama Backbone.history.navigate per modificare l'URL nel browser da (ad esempio da example.com/zlinsky/kampan/mf/ a example.com/moravskoslezsky/kampan/mf/).
Se l'utente copia l'URL dal browser e si apre nella seconda scheda, vedrà la stessa pagina (quindi ogni pagina aggiornata in questo modo ha una pagina corrispondente sul server). Questo è esattamente quello che voglio.

Ma ora ho problema ...

Ho diversi <select> a pagina troppo. Quando l'utente modifica il valore in essi, apporto alcune modifiche dinamiche alla pagina (senza recuperare JSON dal server, gli aggiornamenti vengono eseguiti solo sul lato client). Vorrei modificare gli URL in base a <select>, ad esempio a example.com/moravskoslezsky/kampan/mf/#state1 (così, quando qualcuno invia questo URL, l'altro lato vedrà la stessa pagina, nello stesso stato del mittente).

Non ho trovato il modo, come farlo in Backbone.js. Se imposto pushState: true su Backbone.history, Router ignora i tag hash.
Se imposto pushState: false, non sono in grado di impostare URL come descritto nel primo paragrafo sopra.

Grazie per qualsiasi suggerimento.

+0

sono stati in grado di risolvere il problema? sto affrontando esattamente lo stesso problema. quando pushState è true, non sono in grado URL di instradamento contenenti parti hash; l'hash è completamente ignorato. – Fedor

risposta

2

È possibile chiamare: Backbone.history.navigate("/foo/bar#fragment")

Ma non credo che sia una buona idea, perché ad esempio non supporta pushState, in modo da spina dorsale userà hash gli URL Bang (in IE).

Forse si potrebbe usare querystrings: Backbone.history.navigate("/foo/bar?foo=bar", true) che saranno in browser moderni: http://domain.tld/foo/bar?foo=bar e cioè: http://domain.tld#/foo/bar?foo=bar