我仍然在使用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.checkUrl()
间接调用Backbone.history.getHash()
并从window.location.href
返回哈希值#{%22name%22:%22Viktor%22}
,但这只是部分解码,至少在Chrome中是这样。
这会导致以下检查失败:
if (current === this.fragment) return false;
因为#{"name":"Viktor"}
不等于#{%22name%22:%22Viktor%22}
。我想这就是问题的要点。如果我覆盖Backbone.history.getHash()
并将%22
替换为"
,我的问题就解决了,但我觉得我应该做些不同的事情?
先谢谢你!
1条答案
按热度按时间yvfmudvl1#
你的问题is a bug在 Backbone 网1.4修复,所以我会建议更新你的 Backbone 网版本。
我认为唯一能解决这个问题的方法就是像你一样修补 Backbone.js 。