バックボーンルーティングとクエリパラメータは、不幸な結婚です。問題はよくthis GitHub issueに記載されています。
Backbone.Router
は、URLハッシュフラグメントとpushState APIで動作するように設計されています。ハッシュURLを使用する場合、クエリ文字列はハッシュに先行し、ルート内で照合されることはありません。 pushStateでは、クエリ文字列はURLフラグメントの一部であり、別のルート表現が必要です。
経路がsearch
で、その経路がオプションでパラメータq
,sort
およびtype
を受け取るとします。ようになり、クエリ文字列として:
search?q=kittens&sort=asc&type=images
問題は、古いブラウザのユーザーのために、バックボーンはhashchange
ベースのルーティングに戻りますこと、である、とルートはなります:
?q=kittens&sort=asc&type=images#search
プラグインはこの問題を回避しようとしますが、コアの問題は解決しません。
可能であれば、クエリ文字列を使用しないことを検討し、ルート式にオプションのフラグメントを使用して状態情報を渡す必要があります。前の例のルートはその後になる:限り、ルートのフラグメントがでているよう
var Router = Backbone.Router.extend({
routes: {
"search(/q/:query)(/sort/:sort)(/type/:type)": "search"
},
search: function(query, sort, type) {
console.log(query, sort, type); //-> "kittens", "asc", "images"
}
});
:
//pushState
search/q/kittens/sort/asc/type/images
//hash fragment
#search/q/kittens/sort/asc/type/images
(optional)
ルート部品と:captures
(docs)を使用すると、次の式でこのURLを表すことができ指定された順序で、URLと一致するものはありません。例:
search //-> undefined, undefined, undefined
search/q/kittens/type/images //-> "kittens", undefined, "images"
search/sort/asc/type/images //-> undefined, "asc", "images"
このwサードパーティのクエリ文字列ライブラリやブラウザの互換性について心配する必要はありません。そして、あなたが私に尋ねるなら、後者のタイプのURLもきれいに見えます。
編集のようになります:私はhttps://github.com/jhudson8/backbone-query-parametersプラグインを使用しています。 – TIMEX
あなたはもう少し明確な質問をしてもらえますか?別のページに移動するたびに 'location.search'を空にしたいのですか? –
約2日前に[github](https://github.com/jhudson8/backbone-query-parameters/issues/29)に投稿された問題のようですが、作者はその機能に取り組んでいないようです。 – Starx