我正在触发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没有意义。
答案 0 :(得分:0)
在查看主干js源代码时,您可以看到答案:
https://github.com/jashkenas/backbone/blob/master/backbone.js#L1817
基本上为了将网址与您的路线匹配,您需要解码网址。它有点意义,因为你不想在你的代码中使用url编码的路由 - 尽管这并不能让你伤心。
我怀疑延伸是最明智的事情