2012-02-21 41 views
1

我想用骨幹路由設置的作品如下:Backbone.js路線中的變量:是否需要正則表達式?

  • 路線像/country/[any string],其中country要麼usca,都應該去handleByCountry(country, location)
  • 任何其他途徑應該重定向到/並由handleHome處理。

目前,我有(作爲粗第一次嘗試):

var AppRouter = Backbone.Router.extend({ 
     routes: { 
      "ca/:str": "handleByCountry", 
      "us/:str": "handleByCountry", 
      "*route": "home" 
     }, 
     handleByCountry: function(str){ 
      console.log('ROUTE handleByCountry', route); 
      // how to get the country? parse route by hand? 
     }, 
     home: function(route){ 
      this.navigate('/'); 
     }, 
    }); 

這有以下問題:

  • 也不幹 - 我可以寫兩個ca和匹配的單一路線us?我需要某種條件變量,也許是一個正則表達式。
  • 如何從內部handleByCountry檢查當前的國家?我是否需要再次解析路由字符串?

此外,正在轉發其他路線/,因爲我在做,好的做法?

回答

3

是的,你可以寫一個路由的CA和我們

routes: { 
    ":country/:str": "handleByCountry", 
    "*route": "home" 
}, 

handleByCountry: function(country, str){ 

    console.log('country is:', country, ' and str is: ', str, route); 
}, 

我們使用了類似的模式給所有未知路線,404重定向在同一方式您重定向到家裏做了,所以我相信這是一個如果您需要更多的自定義路線,你可以通過自定義的正則表達式的路由,而不是使用路由器初始化的路由方法骨幹路由字符串正確的方式去做

+0

接近,但也不能令人信服,至少對我來說...我需要限制'country'要麼CA或美國,但沒有別的。這是一個正則表達式的工作嗎? – Richard 2012-02-22 16:39:46

+0

是的,你需要使用'route'方法在你的路由器的初始化和創建一個自定義路線有使用正則表達式 - 檢查它的文檔http://backbonejs.org/#Router-route有使用正則表達式的例子那裏 – 2012-02-22 21:32:17