2012-08-22 23 views
5

Ho un'app funzionante usando Backbone 0.5.3, che non funziona più usando il backbone 0.9.2.Backbone Route non si chiama

Ho identificato che Router.navigate() non chiama la mia rotta per qualche motivo.

Ecco il mio router:

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

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

Chiamando il percorso come manualmente in modo funziona benissimo:

Router.mypage() 

Ho anche cercato di sovrascrivere il metodo .navigate di spina dorsale per eseguire il debug mio app ...

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 ... 
    } 
}); 

... sembra che .navigate si chiami ma ...

Backbone.history.navigate(fragment, options); 

... semplicemente non chiama il percorso.

sto usando pushState, ecco la mia chiamata iniziale:

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

già provato, senza la radice e silenziosi parametri - senza successo.

Ancora: questo funziona utilizzando Backbone 0.5.3.

Grazie a tutti lasciando una risposta!

Achim

risposta

2

Dal fine manual:

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

Cominciate la creazione di una classe di router personalizzato. [...] Si noti che si vorrà evitare di utilizzare una barra leader nelle definizioni del percorso:

Sto indovinando che è sufficiente rimuovere il leader barre dal vostro routes, ad esempio:

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

Ciao @mu è troppo corto, grazie, l'ho già controllato. la rotta non viene trovata con e senza una barra iniziale e/o finale. Chiamare App.Router.mypage() funziona correttamente, quindi deve essere qualcosa sulla corrispondenza del percorso. –

+2

Whoops! Hai ragione, ricontrolla i miei percorsi e questo lo risolve! Btw: il nuovo comportamento sulle barre iniziali nelle rotte è citato nel log delle modifiche del backbone per la versione 0.9 [http://backbonejs.org/#changelog](http://backbonejs.org/#changelog) –

+0

@Achim: Grazie per controllare il registro delle modifiche. –

0

È necessario creare l'istanza del router.

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

Hi Sowa, Questo non è il comple te script, ovviamente installo il Router con 'App.Router = new Router;' Avendo saltato questo, l'esempio non avrebbe funzionato neanche in Backbone 0.5.3. –

3

è necessario impostare l'opzione di trigger per il metodo Navigate, per esempio:

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

+0

Ciao @Erez Rabih, sì, l'ho provato con vero + falso. Sulla console ... 'App.Router.navigate;' ... restituisce il seguente: 'funzione (frammento, opzioni) { Backbone.history.navigate (frammento, opzioni); } ' ... mentre ... ' App.Router.navigate ("/ MYPAGE", {trigger: false}); ' ... restituisce "indefinito". –

+0

** Non si tratta di usare il backbone in generale. ** La mia app funziona bene usando il backbone 0.5.3 - ci deve essere qualche cambiamento nella corrispondenza dell'URL in backbone 0.9.2 –