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

Prevent Backbone.history.navigate from decoding URL fragment

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

代码

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

在我的例子中,searchQuery 可能类似于 max müller,因此包含空格和 unicode 字符。这就是为什么我必须将它用 encodeURIComponent 编码成 max+m%C3%BCller

但是在 Backbone 的导航功能中,我的 searchQuery 被解码回 "max müller" 并像那样返回。

所以最后 URL 变成了

myroot.com/?q=max müller

这不是有效的 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.

没有意义

你可以在查看backbone js源代码时看到这个问题的答案:

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

基本上,为了将 url 与您的路线匹配,您需要解码 url。这是有道理的,因为您不希望在您的代码中使用 url 编码路由 - 尽管这并不能真正帮助您。

我怀疑延长是最明智的做法