2013-01-18 15 views
5

Sto provando a configurare il routing in Backbone 0.9.10. Mi piacerebbe abbinare itinerari del seguente tipo:Parametri opzionali del percorso in Backbone.js? (di nuovo)

/england/ 
/england/birmingham 
/france 
/france/paris 
... 

ecc Questo è quello che ho in mio router in questo momento:

var AppRouter = Backbone.Router.extend({ 
    routes: { 
    "": "index", 
    "(/:country)": "index", 
    "(/:country)(/:city)": "index" 
    }, 
    index: function(country, city) { 
     console.log('index', country, city); 
    } 
}); 
var StateApp = new AppRouter(); 
Backbone.history.start({ pushState: true }); 

Ho due problemi:

  1. Al momento la funzione 'indice' non sta funzionando, qualunque sia l'URL che vado a = /, /england o qualsiasi altra cosa.
  2. Non sono nemmeno chiaro se i parametri opzionali funzioneranno nel modo in cui li ho impostati - è OK avere due parametri opzionali in una riga come questa? Non so quanti paesi ho ancora bisogno di supporto, quindi voglio che il parametro country sia un parametro, piuttosto che specificare i singoli paesi.

Preferisco utilizzare il routing URL appropriato rispetto all'analisi regex, se possibile.

risposta

14

Se si vuole, come nel tuo esempio, per indirizzare tutti gli URL (compreso il root) per un metodo, l'unica necessità di definire una via:

routes: { 
    "(:country)(/:city)": "index" 
} 

Poiché entrambi i parametri sono opzionali, questo corrisponderà :

  • "" (stringa vuota)
  • "england"
  • "Inghilterra/Londra"

Se si desidera che solo i percorsi in formato di england e england/london ma non la pagina radice /, dichiarare un percorso vuoto separata, e rendere il :country parte non-optional:

routes: { 
    "" : "home", 
    ":country(/:city)": "index" 
} 
+0

Genius! Grazie mille. Non avevo proprio bisogno della barra iniziale. – Richard

2

Se si vuole avere un unica via e avere la flessibilità di cambiare ciò che si desidera che siano gli url. si potrebbe anche prendere in considerazione

routes: { 
"(/country/:country)(/city/:city)": "index" 
} 

corrispondenza

"" (Empty string) 
"country/england" 
"country/england/city/london"