2013-01-18 8 views
5

私はBackbone 0.9.10でルーティングを設定しようとしています。Backbone.jsのオプションのルートパラメータ? (もう一度)

    :私は2つの問題を抱えている

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

    :これは私が、現時点では私のルータに持っているものである

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

    など:私は、次の種類のルートを照合したいのですが

  1. 「index」機能は、現時点では何もURL = //englandまたはその他のものは実行していません。
  2. オプションのパラメータが設定されているように動作するかどうかはわかりません。このような行に2つのオプションのパラメータを設定しても問題ありませんか?まだサポートが必要な国がいくつあるかわからないので、個々の国を指定するのではなく、countryパラメータをパラメータにしてください。

可能であれば正規表現解析より適切なURLルーティングを使用したいと思います。両方のパラメータはオプションであるため、これは一致します

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

:あなたがしたい場合

答えて

14

、あなたの例のように、一つの方法へのルート(ルートを含む)すべてのURLに、あなただけの必要性は、1つのルートを定義します:

  • ""(空文字列)
  • "イングランド"
  • "イングランド/ロンドン"

あなただけenglandengland/londonの形式のルートではなく、ルートページ/をしたい場合は、別の空のルートを宣言し、:country一部非オプションを作る:

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

天才に一致

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

を検討することができます!どうもありがとうございます。私は最初のスラッシュは必要ありませんでした。 – Richard

2

あなたが持っているしたい場合はあなたが望むものを見た目に変える柔軟性があります。あなたも

"" (Empty string) 
"country/england" 
"country/england/city/london" 
関連する問題