2012-04-14 11 views
10

Tengo el siguiente problema. Una parte de mi solicitud Backbone tiene como url:Backbone.js y hash líder

site.ru/#profile 

Cuando se carga la página URL cambia a:

site.ru/profile 

Así, el hash se perdió. Por lo tanto, no veo el problema en la función de navegar Backbone:

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

Según entiendo este código limpio un hash en el inicio de la URL.

¿Es cierto que simplemente elimine esta línea de código para solucionar el problema? ¿Podrían recomendarme otras formas de solucionar esto?

TIA!

Respuesta

12

Backbone solo elimina el hash si habilita pushState.

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

http://backbonejs.org/#Router

+0

sí, uso pushState = true. Si elimino pushState, ¿qué pierdo? – dizpers

+0

Todos los controles pushState son si usar URL basadas en hash o no en navegadores compatibles con la API de historial. – abraham

0

Parece Backbone.js está utilizando / & # como delimitadores, para extraer la dirección de la raíz & subdirectorios. El filtro / necesita tp stau tp para obtener el "fragmento". Intenta simplemente eliminar el # en ese RegEx, pero deja el resto de la línea allí. (& deja un comentario en el código que has hecho :)

También enviaría un informe de error, ya que está reenviando el enlace sin el hash.

+0

Por cierto, debe etiquetar este JavaScript también y tal vez RegEx. – tomByrer

+3

Puede usar Backbone.history.start ({pushState: true, hashChange: false}); para mantener pushState y seguir usando hashes – TYRONEMICHAEL

0

Tener el mismo problema, y ​​algunos otros con nosotros ;-) (ver GitHub issue)

he fijado esto por ahora, no escuchando a desmenuzar cambios, así:

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

Esto parecía funcionar para mí.