5

バックボーン0.9.10でルーティングを設定しようとしています。次の種類のルートを一致させたい:

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

私には2つの問題があります:

  1. /'index'関数は、私がアクセスするURL = 、またはその他のURLに関係なく、現時点ではまったく起動してい/englandません。
  2. また、オプションのパラメーターが設定したとおりに機能するかどうかもわかりません。このように2つのオプションのパラメーターを続けて使用しても問題ありませんか。まだいくつの国をサポートする必要があるのか​​わからないので、country個々の国を指定するのではなく、パラメーターをパラメーターにしたいです。

可能であれば、正規表現の解析よりも適切なURLルーティングを使用したいと思います。

4

2 に答える 2

14

例のように、すべてのURL(ルートを含む)を1つのメソッドにルーティングする場合は、次の1つのルートを定義するだけで済みます。

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

両方のパラメーターはオプションであるため、これは一致します。

  • ""(空の文字列)
  • "イングランド"
  • 「イギリス/ロンドン」

englandルートページの形式ではengland/londonなく、ルートページの形式のルートのみが必要な場合は/、別の空のルートを宣言し、その:country部分をオプションではないようにします。

routes: {
  "" : "home",
  ":country(/:city)": "index"
}
于 2013-01-18T12:18:47.200 に答える
2

単一のルートが必要で、URLの外観を柔軟に変更できる場合。あなたも考えることができます

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

マッチング

"" (Empty string)
"country/england"
"country/england/city/london"
于 2013-07-29T17:05:06.783 に答える