2013-01-18 51 views
5

我想在Backbone 0.9.10中設置路由。我想匹配下面樣的路線:Backbone.js中的可選路由參數? (再次)

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

等,這是我此刻在我的路由器:

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

我有兩個問題:

  1. 目前'索引'功能根本沒有啓動,無論我去哪個網址= //england或其他任何網址。
  2. 我也不清楚,如果可選參數將按照我設置它們的方式工作 - 是否可以在這樣的連續兩個可選參數?我不知道我需要支持多少個國家,所以我希望country參數成爲參數,而不是指定單個國家/地區。

我寧願使用正確的URL路由,而不是正則表達式解析,如果可能的話。

回答

14

如果你想,在你的榜樣,路由所有URL(包括根)一種方法,你只需要定義一個路線:

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

因爲這兩個參數都是可選的,這將匹配:

  • 「」(空字符串)
  • 「英格蘭」
  • 「英格蘭/倫敦」

如果你只想在englandengland/london但格式的路線不是根頁面/,宣佈獨立的空航線,使:country部分非可選:

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

天才!非常感謝。我只是不需要最初的斜槓。 – Richard

2

如果你想有一個單一的路線,並有靈活性來改變你想要的網址看起來像。你也可以考慮

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

匹配

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