骨干路由 - 检测浏览器后退按钮

时间:2012-04-19 19:36:57

标签: javascript backbone.js

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

我使用骨干来处理路线,以及骨干来渲染我的观点。

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

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

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

5 个答案:

答案 0 :(得分:10)

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

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

您可以使用Backbone.history.getFragment()知道您的身份。

答案 1 :(得分:3)

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

我正在使用这段代码:

// listening for the browser's back button
window.addEventListener('popstate', function(e) {
    router.navigate(Backbone.history.getFragment(), { trigger: true, replace: true });
});

答案 2 :(得分:1)

您可以延长Backbone.Router并重载routeopen方法。您可以在这两种方法中处理所有页面更改。所以只需从骨干文件中重新复制它们,然后使用它。

答案 3 :(得分: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))
} 

答案 4 :(得分:-2)

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

可以找到一些有用的信息herehere

实际上第二个链接不是文章,而是博客。写这篇文章的人似乎对这个话题了解很多。

UPD:这个想法是,当你的网址发生变化时,骨干网的路由器会触发绑定方法。所以你应该把你的逻辑放在这个方法上,这样你就可以跟踪它。也许它不是非常自动的方式,它需要编写一些代码,但我认为它应该有效。