Events 使用主干路由器/历史记录中的“后退”按钮更改Hashchange事件
我正在使用以下系统配置:Events 使用主干路由器/历史记录中的“后退”按钮更改Hashchange事件,events,backbone.js,back-button,hashchange,Events,Backbone.js,Back Button,Hashchange,我正在使用以下系统配置: Chromium 14.0.835.202在Ubuntu 11.04上使用主干网0.5.3 定义了以下路由和回调的主干路由器: , routes: { '': 'handlerRoot' , 'second': 'handlerSecond' } 在这个系统中,我有以下行为: 如果访问“根”(home),则调用“handlerRoot”。 好吧,这正是我所期待的 如果我转到“second”(
Chromium 14.0.835.202在Ubuntu 11.04上使用主干网0.5.3 定义了以下路由和回调的主干路由器:
, routes: {
'': 'handlerRoot'
, 'second': 'handlerSecond'
}
在这个系统中,我有以下行为:
我正在查看Backbone.js代码的历史记录,我看到它正在使用“onhashchange”事件(适用于兼容浏览器)。因此,我在浏览器控制台中手动设置以下内容:
我用这个配置做了相同的实验(1)、(2)、(3)和(4)。实际上,以前历史记录中的所有URL路径都是按相反顺序打印的。例如,在(3)中,当我按下后退按钮时,首先打印“second”的URL,然后打印“root”的URL。因此,主干行为实际上是“onhashchange”行为 我的问题是: 哪一个是这种行为的原因(因为它有什么用处)?原因例如,如果我的回调只切换视图,在示例(4)中,我切换视图四次,而实际上我只需要切换一次视图(通过在“root”中显示的视图更改“second”中显示的视图)。有什么方法可以让你有这种行为吗 提前谢谢 编辑: 在多次搜索之后,Chromium在控制台上只出现了一个带有后退按钮的bug,该路由与其他浏览器一样只触发一次
我创建了一个JSFIDLE来尝试您的问题,但我看不出问题所在
- 您可以在此处测试路由:
- 请参见此处的代码:
我回答了GitHub存储库中的一个问题,在这里重新打开它:谢谢Andreas,现在文本看起来更清晰了:)使用Chrome的主干0.5.3,以下代码按预期工作:
code
var MainRouter=backbone.Router.extend({,routes:{'':'handlerRoot','second':'handlerSecond'},handlerRoot:函数(操作){alert('handlerRoot');},second:函数(操作){alert('second')}code
我想你的代码还有其他问题……也许你的问题在于你在视图中所做的事情,而不是在路由器中?我同意@Robert。当我第一次读到这篇文章时,它开始听起来像僵尸视图。你能发布更多的代码,也许是你在handlerRoot和handlerSecon中所做的事情吗d?@Robert,正如Atinux所指出的,Chromium确实存在问题。我在Ubuntu11.04上用Firefox 8.0进行了测试,它按预期工作(只调用一次回调)。因此,问题不仅在于您测试的Chromium 15.0.874.106,还在于14.0.835.202版本(我的版本).好的,我明白了,Chromium在console.log上有一个bug,使用back按钮,但是您的路由只执行一次,就像其他web浏览器一样。看看我的JSFIDLE,我实现了它。正如您所看到的,每个路由触发器都会创建并添加到列表中,在Chromium上测试JSFIDLE,即使控制台上的bug存在,您也会看到nt,这个例子没有问题。
function locationHashChanged() {
console.log(window.location.toString())
};
window.onhashchange = locationHashChanged;