12

我试图找到一种方法来检测用户何时按下浏览器中的后退/前进按钮。

我正在使用主干来处理路由,以及使用主干来呈现我的视图。

问题是我无法从任何地方挂钩此页面更改事件。

我尝试在我的视图的初始化函数中添加一个日志..但是当我使用后退按钮时它没有被触发。

我真的不确定如何检测此页面更改。

4

5 回答 5

10

您可以将回调绑定到 Backboneroute事件:

    Backbone.history.on('route', function () {
        // Do your stuff here
    });

你可以Backbone.history.getFragment()用来知道你是站着的。

于 2013-05-31T13:55:24.580 回答
3

当按下后退按钮时,会触发popstate事件。

我正在使用这段代码:

// listening for the browser's back button
window.addEventListener('popstate', function(e) {
    router.navigate(Backbone.history.getFragment(), { trigger: true, replace: true });
});
于 2015-05-11T18:33:45.380 回答
1

您可以扩展Backbone.Routerand 重载routeandopen方法。您可以在这两种方法中处理所有页面更改。所以只需从主干文件中重新复制它们,然后使用它。

于 2012-04-19T19:44:03.020 回答
0

显然,即使 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))
} 
于 2012-06-23T19:40:31.960 回答
-2

您应该使用Backbone.Router并确保Backbone.history.start()在启动应用程序时不要忘记。

一些有用的信息可以在这里这里找到

其实第二个链接不是文章,而是博客。写它的人似乎真的很了解这个话题。

UPD:这个想法是,当您的 url 更改时,主干的路由器会触发绑定方法。所以你应该把你的逻辑放在这个方法上,这样你就可以跟踪它。也许这不是非常自动的方式,需要编写一些代码,但我认为它应该可以工作。

于 2012-04-19T19:56:08.327 回答