2016-04-15 143 views
1

我触发Backbone的导航功能来更改事件触发后的URL。防止Backbone.history.navigate解码URL片段

代码

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

在我的情况下,searchQuery就应该像这样缪勒,从而包含空格和Unicode字符。这就是为什么我必须用encodeURIComponent编码为max + m%C3%BCller

但是在Backbones导航功能中,我的searchQuery正在解码回“maxmüller”并且像那样返回。

所以在最后的URL被改变成

myroot.com/?q=max穆勒

这不是一个有效的URL。相反,它应该是这样的:

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

你可以看到这个问题的答案,而在寻找骨干JS代码:

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

基本上以匹配的URL,你的路线,你需要的URL进行解码。这很有意义,因为你不会想要代码中的URL编码路由 - 尽管这并不能真正帮助你。

我怀疑扩展是做

+0

最明智的事情虽然扩展核心是做的最好的事情,如你所说,我决定暂时使用普通的JavaScript,做这样的:窗口' .location.hash =“?q =”+ encodeURIComponent(searchQuery);'。 –

+0

是的,这是有道理的:) –