2012-08-22 33 views
5

Tengo una aplicación que funciona con Backbone 0.5.3, que ya no funciona con la red troncal 0.9.2.Ruta troncal no se llama

Identifiqué que Router.navigate() no llama a mi ruta por algún motivo.

Aquí es mi Router:

var Router = Backbone.Router.extend({ 
    routes: { 
     '/mypage': 'mypage', 
    }, 

    mypage: function() { 
     // show page ... 
    } 
}); 

Llamando la ruta manualmente al igual que funciona bien:

Router.mypage() 

También probé para sobrescribir el método .navigate de columna vertebral para depurar mi aplicación ...

var Router = Backbone.Router.extend({ 
    routes: { 
     '/mypage': 'mypage', 
    }, 

    navigate: function(fragment, options) { 
     console.log("navigate called"); 
     Backbone.history.navigate(fragment, options); 
    }, 

    mypage: function() { 
     // show page ... 
    } 
}); 

... parece que se llama .navigate pero ...

Backbone.history.navigate(fragment, options); 

... simplemente no llama a la ruta.

estoy usando pushState, aquí es mi llamada inicial:

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

bastante bueno en ello sin las raíces y silenciosos parámetros - sin éxito.

De nuevo: Esto funciona usando Backbone 0.5.3.

Gracias a todos por la respuesta!

Achim

Respuesta

2

Desde el fine manual:

extiendenBackbone.Router.extend(properties, [classProperties])

empezar por la creación de una clase personalizada del enrutador. [...] Tenga en cuenta que usted querrá evitar el uso de una barra que lleva en sus definiciones de ruta:

supongo que sólo hay que quitar el líder barras de su routes, por ejemplo:

routes: { 
    'mypage': 'mypage', 
}, 
+0

Hola, @mu es demasiado corto, gracias, ya lo he comprobado. la ruta no se encuentra con y sin una barra inicial y/o posterior. Llamar a App.Router.mypage() funciona bien, por lo que debe ser algo sobre la coincidencia de ruta. –

+2

¡Vaya! ¡Tienes razón, solo revisaste mis rutas y esto lo solucionó! Btw: El nuevo comportamiento sobre las barras diagonales principales en las rutas se menciona en el registro de cambios de la red troncal para la versión 0.9 [http://backbonejs.org/#changelog](http://backbonejs.org/#changelog) –

+0

@Achim: Gracias para verificar el registro de cambios –

0

Debe crear una instancia de enrutador.

var router = new Router(); 
router.navigate(...); 
+0

Hola Sowa, Este no es el comple te script, por supuesto, instanciar el enrutador con 'App.Router = new Router;' Al omitir esto, el ejemplo tampoco habría funcionado en Backbone 0.5.3. –

3

tiene que configurar la opción de disparo para el método de navegar, por ejemplo:

Router.navigate("/mypath", {trigger: true})

+0

Hola @Erez Rabih, sí, lo probé con verdadero + falso. En la consola ... 'App.Router.navigate;' ... devuelve lo siguiente: ' de función (fragmento), opciones { Backbone.history.navigate (fragmento, opciones); } ' ... tiempo ... ' App.Router.navigate ("/ mipágina", {gatillo: false}); ' ... devuelve "indefinido". –

+0

** Esto no se trata de utilizar Backbone en general. ** Mi aplicación funciona bien usando la red troncal 0.5.3 - debe haber algún cambio sobre la correspondencia de URL en la red troncal 0.9.2 –