2012-04-14 12 views
10

Ho il seguente problema. Una parte della mia applicazione Backbone ha url del tipo:Backbone.js e leader di hash

site.ru/#profile 

Quando la pagina viene caricata URL cambia a:

site.ru/profile 

Così, l'hash è stato perso. Così, vedo il problema in funzione di navigazione di Backbone:

var routeStripper = /^[#\/]/; 
... 
var frag = (fragment || '').replace(routeStripper, ''); 

quanto ho capito questo codice pulito un hash al inizio di URL.

E 'vero modo per eliminare semplicemente questa riga di codice per risolvere il problema? Potresti consigliarmi altri modi per risolvere questo problema.

TIA!

risposta

12

Backbone rimuove solo l'hash se si attiva pushState.

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

http://backbonejs.org/#Router

+0

sì, io uso pushState = true. Se rimuovo pushState cosa ho perso? – dizpers

+0

Tutti i controlli pushState sono se utilizzare URL basati su hash o meno sui browser che supportano l'API Cronologia. – abraham

0

Sembra Backbone.js sta usando / & # come delimitatori, per tirare fuori l'indirizzo radice & sottodirectory. Il filtraggio / bisogno tp tp stau ottenere il "frammento". Prova a eliminare il # in quella RegEx, ma lascia lì il resto della linea. (& lascia un commento nel codice che hai fatto! :)

Vorrei anche inviare una segnalazione di bug, dal momento che sta rinviando il collegamento senza l'hash.

+0

BTW, si dovrebbe etichettare questa JavaScript anche e forse RegEx. – tomByrer

+3

È possibile utilizzare Backbone.history.start ({pushState: vero, hashChange: false}); per mantenere pushState e usare ancora hash – TYRONEMICHAEL

0

Avere lo stesso problema, e alcuni altri con noi ;-) (vedi GitHub issue)

Ho risolto questo per ora, non ascoltando hash modifiche, così:

Backbone.history.start({ 
    pushState: true, 
    hashChange: false, 
    root: '/' 
}); 

Questo sembrava funzionare per me.