由于编码不匹配,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。
我仍在使用 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。