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

Backbone.js loads URL twice because of encoding mismatch

我仍在使用 Backbone.js,当 JSON 在散列。

假设我想导航到这个散列:#{"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() 和 returns 从 window.location.href 散列 #{%22name%22:%22Viktor%22},但这只是部分解码, 至少在 Chrome.

这会导致以下检查失败:

if (current === this.fragment) return false;

因为#{"name":"Viktor"}不等于#{%22name%22:%22Viktor%22}。我认为这就是问题的要点。如果我覆盖 Backbone.history.getHash() 并将 %22 替换为 " 我的问题就解决了,但我觉得我应该做些不同的事情?

提前致谢!

您的问题 is a bug 已在 Backbone 1.4 中修复,因此我建议更新您的 Backbone 版本。

我认为可以解决的唯一方法是像您一样修补 Backbone。