2016-04-15 11 views
1

イベント発生後にURLを変更するために、バックボーンのナビゲート機能を起動しています。私の場合はBackbone.history URLフラグメントの復号化を防止する

コード

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

searchQueryは、このようにスペースやUnicode文字を含む、マックス・ミュラーのようなものである可能性があります。だから、encodeURIComponentmax + m%C3%BCllerにエンコードしなければならないのです。

しかし、バックボーンのナビゲート機能では、私のsearchQueryは "maxmüller"に戻って復号化され、そのように戻されます。

だから、最後にURLが有効なURLではありません

myroot.com/?q=maxマーラー

に変更されます。代わりに、それはこのようにする必要があります:

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

限り、これを解決するには、2つの可能な方法がある私は考えることができるよう:

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 

なぜBackboneのデフォルトの動作ではないのですか?無効なURLを作成することは意味がありません。

答えて

0

バックボーンjsのソースコードを見ながらあなたはこの答えを見ることができます:

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

基本的にURLをデコードする必要がある、あなたのルートにURLを一致させるために。あなたのコードにURLをエンコードしたルートが欲しくないのでちょっと意味がありますが、それは本当にあなたを悲しいほど助けません。私は拡張は、あなたが言ったようにコアを拡張することは、行うための最善のことだろうが、

+0

を行うには、最も賢明なことだろう疑う

は、私は無地のJavaScriptを使用する瞬間を決め、次のように行った: 'ウィンドウ。location.hash = "?q =" + encodeURIComponent(searchQuery); '。 –

+0

それは意味があります:) –

関連する問題