阻止 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 编码路由 - 尽管这并不能真正帮助您。
我怀疑延长是最明智的做法
我正在触发 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 编码路由 - 尽管这并不能真正帮助您。
我怀疑延长是最明智的做法