骨干路由器获取后退按钮的历史长度

时间:2013-01-30 14:42:18

标签: cordova backbone.js back-button backbone-routing

我在PhoneGap应用程序中使用Backbone。像每个移动应用程序一样,我需要一个后退按钮功能。它基本上与Backbone完美配合,因为我可以简单地使用window.history.back(),它只是有效。

我唯一的问题是决定何时显示后退按钮。使用window.history.length不起作用,因为在使用back()时它不会减少(当然,因为你也可以forward())。

有没有办法检测是否有更多的历史记录,或者我是否已经在堆栈的底部?由于浏览器似乎没有提供此信息(How to check if the user can go back in browser history or not),Backbone是否可以跟踪这个?

3 个答案:

答案 0 :(得分:4)

你可以很容易地实现这样的东西

Backbone.history.length = 0;
Backbone.history.on('route', function () { ++this.length; });
myRouter.back = function () {
  Backbone.history.length -= 2;
  window.history.back();
};

只需使用myRouter.back()即可返回。

答案 1 :(得分:2)

Casey Foster的回答看起来很不错,但有一个缺陷:使用router.navigate triggerreplace两者都设置为true时,你最终会得到一个错误的柜台。

我提出了一个更简单的解决方案:基本上只有一条路线我不需要后退按钮,那就是index路线。因此,我的代码现在看起来像

Backbone.history.on('route', _.bind(function(router, route) {
    if(route === 'index') {
        this.$el.removeClass('has-back-button');
    } else {
        this.$el.addClass('has-back-button');
    }
}, this));

答案 2 :(得分:0)

@CaseyFoster's answer的基础上,您可以自己跟踪历史记录。除了您自己的后退按钮,您还需要按下设备的硬件后退按钮。

PhoneGap为此提供backbutton事件:

document.addEventListener("backbutton", function() {
  Backbone.history.length -=2;
}, false);

请注意,Casey Foster的答案中定义了Backbone.history.length,它不是Backbone本身的一部分。