Backbone.jsルートにオプションのパラメーターを含めることはできますか?
例:
routes:
"search/[:query]": "searchIndex"
の代わりに:
routes:
"search/": "searchIndex"
"search/:query": "searchIndex"
Backbone 0.9.9の時点では、オプションのパラメーターを括弧で追加できます。
たとえば、ルートオブジェクトで、次のようなオプションのルートパーツを定義できます。
routes: {
"organize(/:action)": "displayOrganize"
}
これで、URLパスは/#organize
と/#organize/create
のようなルートに一致します。
/#organize/
(末尾のスラッシュを含む)のようなルートを認識する必要がある場合は、次のことができることに注意してください。
routes: {
"organize(/)(:action)": "displayOrganize"
}
おそらく、最も簡単な方法は、複数のルートを宣言することです。
routes:{
"authProxy/:hash": "authProxy",
"authProxy/:hash/:url": "authProxy"
}
メソッドでそれらを確認するだけです:
authProxy: function(hash, url){
if (url){
// Hash and URL.
}else{
// Just hash.
}
}
他の開発者が何が起こっているのかを理解するのは非常に簡単なので、私はこれが他の2つの答えよりもはるかに優れていることに注意してください。
route
メソッド を使用して、正規表現ベースのルートを手動で追加できます。
route
router.route(route, name, [callback])
ルーターのルートを手動で作成します。
route
引数には、ルーティング文字列または正規表現を使用できます。ルートまたは正規表現からの一致する各キャプチャは、コールバックへの引数として渡されます。
したがって、次のようなものが機能するはずです。
this.route(/^search\/(.*)?/, 'searchIndex');
次に、searchIndex
が呼び出され、何もまたは:query
を引数として。
欠点は、routes
オブジェクトに正規表現ルートを配置できないことです。すべて一緒にしたい場合は、ルーターのroute
メソッド内にinitialize
を含むすべてのルートを追加できます。
*splat
の使用はどうですか:
ルート
router.routes
ルートハッシュは、ビューのイベントハッシュと同様に、パラメーターを含むURLをルーターの関数にマップします。ルートには、
:param
というパラメーター部分を含めることができます。これは、スラッシュ間の単一のURLコンポーネントに一致します。感嘆符の部分*splat
は、任意の数のURLコンポーネントと一致させることができます。たとえば、
"search/:query/p:page"
のルートは#search/obama/p2
のフラグメントと一致し、"obama"
および"2"
をアクションに渡します。"file/*path"
のルートは#file/nested/folder/file.txt
に一致し、"nested/folder/file.txt"
をアクションに渡します。