Backbone Routing und Abfrageparameter sind eine unglückliche Ehe. Probleme sind in this GitHub issue gut dokumentiert.
Das Kernproblem ist, dass Backbone.Router
entworfen wird, um mit URL-Hash-Fragmenten sowie der PushState-API zu arbeiten. Bei der Verwendung von Hash-URLs steht die Abfragezeichenfolge vor dem Hash und wird in der Route nie abgeglichen. Mit pushState ist die Abfragezeichenfolge Teil des URL-Fragments und erfordert einen anderen Routenausdruck.
Angenommen, Sie search
eine Route haben würde, und dass Routenparameter optional q
, sort
und type
nehmen würde. Als Query-String, der etwas aussehen würde:
search?q=kittens&sort=asc&type=images
Das Problem ist, dass für die Nutzer von älteren Browsern, wird Backbone zu hashchange
based Routing zurückkehren, und die Route wird geworden:
?q=kittens&sort=asc&type=images#search
Die Plug-in, das Sie verwenden, versucht, dieses Problem zu umgehen, löst das Kernproblem jedoch nicht.
Wenn möglich, sollten Sie in Betracht ziehen, keine Abfragezeichenfolgen zu verwenden und keine Statusinformationen mit optionalen Fragmenten in den Routenausdrücken zu übergeben. Die vorherige Beispiel Routen wären dann:
//pushState
search/q/kittens/sort/asc/type/images
//hash fragment
#search/q/kittens/sort/asc/type/images
Mit (optional)
Route Teilen und :captures
(docs), können Sie diese URL mit dem folgenden Ausdruck darstellen könnten:
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"
}
});
Solange die Strecke Fragmente sind in Die angegebene Reihenfolge entspricht URLs mit keinem, allen und allen Parametern, z. B .:
Dieser w Sie müssen sich keine Gedanken über die Abfragezeichenfolgenbibliotheken von Drittanbietern oder die Browserkompatibilität machen. Und wenn Sie mich fragen, sieht die letztere Art von URL auch sauberer aus.
bearbeiten sein: Ich habe das https://github.com/jhudson8/backbone-query-parameters Plugin verwenden. – TIMEX
Könnten Sie die Frage ein wenig klarer machen? Sie möchten die 'location.search' immer löschen, wenn Sie zu einer anderen Seite navigieren? –
Es scheint, ein Problem vor etwa 2 Tagen auf [Github] (https://github.com/jhudson8/backbone-query-parameters/issues/29) gepostet und der Autor scheint nicht an dieser Funktion gearbeitet haben. – Starx