由于编码不匹配,Backbone.js加载URL两次

由于编码不匹配,Backbone.js加载URL两次,backbone.js,Backbone.js,我仍然在使用Backbone.js,当散列中有JSON时,URL加载两次(至少在Chrome中)会遇到一些问题 假设我想导航到此哈希:{“name”:“Viktor”}。使用encodeURIComponent(“{”name:“Viktor”}”)对其编码后它将变成%7B%22name%22%3A%22Viktor%22%7D 如果我然后尝试导航到哈希,如this.navigate(“%7B%22name%22%3A%22Viktor%22%7D”)Backbone将哈希解码为{“name”:

我仍然在使用Backbone.js,当散列中有JSON时,URL加载两次(至少在Chrome中)会遇到一些问题

假设我想导航到此哈希:
{“name”:“Viktor”}
。使用
encodeURIComponent(“{”name:“Viktor”}”)对其编码后
它将变成
%7B%22name%22%3A%22Viktor%22%7D

如果我然后尝试导航到哈希,如
this.navigate(“%7B%22name%22%3A%22Viktor%22%7D”)
Backbone将哈希解码为
{“name”:“Viktor”}
。然后触发一个
hashchange
事件,该事件调用
Backbone.history.checkUrl()
,该事件间接调用
Backbone.history.getHash()
,并从
window.location.href
返回hash
{%22name%22:%22Viktor%22}
,但这只是部分解码,至少在Chrome中是这样

这会导致以下检查失败:

if (current === this.fragment) return false;
因为
{“name”:“Viktor”}
不等于
{%22name%22:%22Viktor%22}
。我认为这就是问题的要点。如果我重写
Backbone.history.getHash()
并将
%22
替换为
我的问题解决了,但我觉得我应该做些不同的事情

提前感谢您!

您的问题已在主干网1.4中修复,因此我建议您更新主干网版本


我认为唯一可以解决这个问题的方法就是像你一样修补主干。

为什么,谢谢!我在谷歌上搜索了很多次,但没有发现这个问题。我还比较了我们上一次使用的v1.3.0和v1.4版本之间的代码,但没有发现任何问题。