2012-03-06 23 views
6

Penso che mi mancano alcune nozioni di base sulle funzioni di routing di Backbone.Backbone JS Routing non funziona come previsto

sto costruendo un app e sembra qualcosa in questo modo:

file: app.js

App = {} 
App.nav = new Backbone.Router; 
require('app/controller'); 

file: controller.js

App.nav.route('home', 'home', function() { 
    console.log("Home Activated"); 
}); 

App.navigate('home'); 

A questo punto il browser cambia l'URL nella barra degli indirizzi per /home ma non succede nulla e non ricevo il messaggio della console Home Activated.

Ho provato a utilizzare la mia classe di routing (ad esempio Backbone.Router.extend({})) ma in realtà non vedo un punto perché ho ancora bisogno di inizializzarlo, e voglio usare una cronologia centrale/navigazione nella mia app che tutti i moduli/controllori aggiungono il routing ad esso piuttosto che creare un router per ogni controller.

Cosa sto sbagliando?

risposta

15

http://documentcloud.github.com/backbone/#Router-navigate

Dalla documentazione:

Se si desidera chiamare anche la funzione percorso, impostare l'opzione di trigger su true.

Ma come OlliM ha scritto, è necessario attivare prima la cronologia!

Quindi la tua risposta dovrebbe essere:

Backbone.history.start(); 
App.nav.navigate('home', {trigger: true}); 

edit: dimenticato di mettere "nav"

+1

'{grilletto: true}' non è parte della soluzione qui. Backbone verrà attivato per impostazione predefinita: true se non viene specificata alcuna opzione. Ecco lo snippet di codice: 'navigate: function (fragment, options) { if (! History.started) restituisce false; se (! Options || options === true) options = {trigger: !! options}; ' – Kinergy

+0

Il tuo link ha 404'd. – NuclearPeon

1

Voglio solo farlo notare perché mi ha salvato un mondo di dolore e di angoscia.

Se si instradano a una pagina personalizzata, come

Backbone.router.navigate('/some/page'); // does not work 

e sembra non funzionare. Aggiungere un finale '/'

Backbone.router.navigate('/some/page/'); // works 

Questo mi è costato un paio d'ore di risoluzione dei problemi ...