【发布时间】:2012-05-01 09:45:04
【问题描述】:
我正在尝试寻找一种方法来检测用户何时在浏览器中按下了后退/前进按钮。
我正在使用主干来处理路由,并使用主干来呈现我的视图。
问题是我无法从任何地方挂钩此页面更改事件。
我尝试在我的视图的初始化函数中添加一个日志......但是当我使用后退按钮时它没有被触发。
我真的不确定如何检测此页面更改。
【问题讨论】:
我正在尝试寻找一种方法来检测用户何时在浏览器中按下了后退/前进按钮。
我正在使用主干来处理路由,并使用主干来呈现我的视图。
问题是我无法从任何地方挂钩此页面更改事件。
我尝试在我的视图的初始化函数中添加一个日志......但是当我使用后退按钮时它没有被触发。
我真的不确定如何检测此页面更改。
【问题讨论】:
当按下返回按钮时,会触发 popstate 事件。
我正在使用这段代码:
// listening for the browser's back button
window.addEventListener('popstate', function(e) {
router.navigate(Backbone.history.getFragment(), { trigger: true, replace: true });
});
【讨论】:
您可以将回调绑定到 Backbone route 事件:
Backbone.history.on('route', function () {
// Do your stuff here
});
您可以使用Backbone.history.getFragment() 了解您是否站立。
【讨论】:
【讨论】:
app 视图中判断用户是否单击了“返回”按钮?从我的角度来看,我会区别对待这两种情况。
显然,即使 GitHub 也不知道如何检测按下了哪个按钮;) 他们使用以下代码:
slideTo: function (a) {
var b = this.pathFromURL(a),
c = this.frameForPath(b),
d = $("#slider .frame-center").attr("data-path") || "";
c.is(".frame-center") || (d == "/" || b.split("/").length > d.split("/").length ?
this.slideForwardTo(a) : this.slideBackTo(a))
}
【讨论】:
您可以扩展Backbone.Router 并重载route 和open 方法。您可以在这两种方法中处理所有页面更改。所以只需从主干文件中重新复制它们,然后使用它。
【讨论】: