2016-04-15 5 views
1

Ich trigger Backbone-Navigation-Funktion zum Ändern der URL nach einem Ereignis ausgelöst wird.Prevent Backbone.history.navigate von der Entschlüsselung URL-Fragment

-Code

Backbone.history.navigate("?q=" + encodeURIComponent(searchQuery))

In meinem Fall so etwas wie Max Müller, also mit Leerzeichen und Unicode-Zeichen searchQuery könnte. Deshalb muss ich es kodieren mit in max + m% C3% BCller.

Aber innerhalb der Backbones Navigationsfunktion wird meine searchQuery zurück zu "max müller" decodiert und so zurückgegeben.

So am Ende wird die URL in

geändert

myroot.com/?q=max müller

, die keine gültige URL ist. Stattdessen sollte es so sein:

myroot.com/?q=max+m%C3%BCller

Soweit ich denken kann, gibt es zwei Möglichkeiten, dieses Problem zu lösen:

1. changing/extending Backbone.history.navigate to return the encoded 
    fragment 

2. recreating Backbone's navigate functionality to change the URL with plain Javascript or using any other library 

Aber warum ist es nicht Standardverhalten von Backbone? Es ist nicht sinnvoll, eine ungültige URL zu erstellen.

Antwort

0

Sie können die Antwort auf diese während sehen an der Backbone.js Quellcode suchen:

https://github.com/jashkenas/backbone/blob/master/backbone.js#L1817

Grundsätzlich, um die URL zu Ihren Routen Sie die URL entschlüsseln müssen übereinstimmen. Es macht einen Sinn, da Sie keine URL-codierten Routen in Ihrem Code haben möchten - obwohl Ihnen das leider nicht wirklich hilft.

Ich würde vermuten Verlängerung das Vernünftigste, was

+0

zu tun Obwohl der Kern erstreckt das Beste, was zu tun wäre, wie Sie gesagt haben, entschied ich mich für den Moment Ebene zu verwenden JavaScript und tat so: 'Fenster .location.hash = "? q =" + encodeURIComponent (searchQuery); '. –

+0

Ja das macht Sinn :) –