防止Backbone.history.navigate解码URL片段

时间:2016-04-15 11:31:38

标签: javascript backbone.js url-encoding

我正在触发Backbone的导航功能,以便在事件触发后更改URL。

代码

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

就我而言,searchQuery可能类似于maxmüller,因此包含空格和unicode字符。这就是我必须用encodeURIComponent将其编码为 max + m%C3%BCller 的原因。

但在Backbones导航功能中,我的searchQuery被解码回“maxmüller”并返回。

最后,URL变为

  

myroot.com/?q=maxmüller

这不是有效的网址。相反它应该是这样的:

  

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

据我所知,有两种方法可以解决这个问题:

 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没有意义。

1 个答案:

答案 0 :(得分:0)

在查看主干js源代码时,您可以看到答案:

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

基本上为了将网址与您的路线匹配,您需要解码网址。它有点意义,因为你不想在你的代码中使用url编码的路由 - 尽管这并不能让你伤心。

我怀疑延伸是最明智的事情