我在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是否可以跟踪这个?
答案 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
trigger
和replace
两者都设置为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本身的一部分。