处理流星 android 应用程序中的后退按钮

Handling the back button in a meteor android app

我构建了一个带有移动应用程序界面的 Meteor 应用程序(使用 Ratchet),仅设计为 运行 作为应用程序。在每个页面上,都有一个 "back" link 带您返回父页面。例如,如果我深入到页面的层次结构中,如下所示:

首页 > 分类 > Post

我可以在 Post 页面中使用 link 返回类别页面。现在,问题是,如果 从这个类别页面 我点击后退按钮,它应该与点击页面上的后退 link 具有相同的行为。 (在这种情况下,带我到主页)遗憾的是,这没有发生,我被带回 Post 页面。

在 iPhone 上这不是问题(据我所知),因为设备没有内置实际的后退按钮。但是在 Android 上它让我很头疼,例如:

假设用户转到 Post 页面,他可以使用页面上显示的按钮删除该页面。 post-删除方法完成后,我将用户带回类别页面:

Router.go('categoryPage', {'_id': categoryId});

问题是:如果用户在删除 post 后点击后退按钮,他或她将被带到 "not found" 页面,因为之前的 post 已被删除。现在我可以通过像这样添加 replaceState: true 来避免这种情况:

Router.go('categoryPage', {'_id': categoryId}, {replaceState: true});

但是现在,当用户从“类别”页面点击后退按钮时,他或她将被带到之前Post页面的页面,该页面是...相同的类别页面。所以按钮在第一次按下时什么都不做。

我还尝试在每个模板的 `rendered̀ 函数中 pushState 所需页面的 url,但无济于事(我会在主页中放置什么?):

Template.categoryPage.rendered = function () {
  history.pushState(null, null, Router.url('home'));
};

Template.postPage.rendered = function () {
  history.pushState(null, null, Router.url('categoryPage', {'_id': this.data.categoryId}));
};

有没有人解决过这个问题and/or能不能传授一些知识?

按下后退按钮后,Cordova 立即触发 "backbutton" 事件,请参阅 there

通过侦听此事件,您应该能够覆盖默认行为并执行您想要的操作:

document.addEventListener("backbutton", onBackButtonDown, false);

function onBackButtonDown(event) {
  event.preventDefault();
  event.stopPropagation();

  // Do what you want
  ...
}