web-dev-qa-db-ja.com

Backbone.jsルートオプションパラメータ

Backbone.jsルートにオプションのパラメーターを含めることはできますか?

例:

routes:
  "search/[:query]": "searchIndex"

の代わりに:

routes:
  "search/": "searchIndex"
  "search/:query": "searchIndex"
40
TTT

Backbone 0.9.9の時点では、オプションのパラメーターを括弧で追加できます。

たとえば、ルートオブジェクトで、次のようなオプションのルートパーツを定義できます。

routes: {
    "organize(/:action)": "displayOrganize"
}

これで、URLパスは/#organize/#organize/createのようなルートに一致します。

/#organize/(末尾のスラッシュを含む)のようなルートを認識する必要がある場合は、次のことができることに注意してください。

routes: {
    "organize(/)(:action)": "displayOrganize"
}
89
Gabe H

おそらく、最も簡単な方法は、複数のルートを宣言することです。

routes:{
        "authProxy/:hash": "authProxy",                                                                                                                                                                 
        "authProxy/:hash/:url": "authProxy"
}

メソッドでそれらを確認するだけです:

authProxy: function(hash, url){
    if (url){
      // Hash and URL.
    }else{
      // Just hash.
    }
}

他の開発者が何が起こっているのかを理解するのは非常に簡単なので、私はこれが他の2つの答えよりもはるかに優れていることに注意してください。

16
Mauvis Ledford

routeメソッド を使用して、正規表現ベースのルートを手動で追加できます。

routerouter.route(route, name, [callback])

ルーターのルートを手動で作成します。route引数には、ルーティング文字列または正規表現を使用できます。ルートまたは正規表現からの一致する各キャプチャは、コールバックへの引数として渡されます。

したがって、次のようなものが機能するはずです。

this.route(/^search\/(.*)?/, 'searchIndex');

次に、searchIndexが呼び出され、何もまたは:queryを引数として。

欠点は、routesオブジェクトに正規表現ルートを配置できないことです。すべて一緒にしたい場合は、ルーターのrouteメソッド内にinitializeを含むすべてのルートを追加できます。

8
mu is too short

*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"をアクションに渡します。

3
tkone