0

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

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

有没有办法检测是否有更多历史记录或者我是否已经在堆栈的底部?由于浏览器似乎没有提供此信息(如何检查用户是否可以返回浏览器历史记录),Backbone 是否会跟踪此信息?

4

3 回答 3

4

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

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

而只是myRouter.back()用来回去。

于 2013-01-30T15:42:40.090 回答
2

Casey Foster 的答案乍一看看起来不错,但有一个缺陷:当使用router.navigatewithtriggerreplaceboth 设置为时,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));
于 2013-01-30T16:39:34.107 回答
0

基于@CaseyFoster 的回答,您可以自己跟踪历史。除了您自己的后退按钮之外,您还需要抓住设备的硬件后退按钮按下。

PhoneGapbackbutton为此提供了事件:

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

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

于 2013-01-30T16:18:40.270 回答