【发布时间】:2012-06-06 10:57:53
【问题描述】:
我有一个使用 Backbone 和 Zepto 开发的单页移动应用程序。
它可以与浏览器中的后退/前进按钮正常工作。
当用户导航到一个页面时,新 内容从右侧滑入,而旧 内容从左侧滑出(并滑出视口)。如果用户按下“前进”浏览器按钮,我希望同样的事情发生。这一切都有效。
我有一个添加到 body 元素 navigate-back 的类,它将翻转此行为,因此当用户使用浏览器的后退按钮导航返回时,他们会看到内容滑动返回从左侧进入,其他内容滑入右侧。基本上与前进相反。
我需要检测用户是否正在向后导航,以便调用替代行为。我曾尝试实现自己的历史堆栈,但遇到了很多问题,有时它会将前进标记为 back 导航,这会破坏视觉提示。它现在变成了一堆黑客,如果我发布它可能只会让我感到尴尬。
实现我自己的历史堆栈的最佳方法是什么,以便我可以检测用户是否在单页 Backbone 移动应用程序的上下文中向前/向后导航?
【问题讨论】:
-
澄清一下:您是否使用骨干路由在页面之间导航?您的页面是否有固有的顺序(从 B 页面到 A 页面总是“返回”)还是只是您浏览项目的顺序?
-
@OlliM 我有一个主干路由器,但我不必为每次更改都调用
router.navigate(),但是我确实有一个自定义事件在每个页面更改时触发。也没有明确的页面顺序。 -
好吧,我处理的问题是相关的,但不一样:我在 UI 中有按钮作为后退,并希望浏览器历史记录反映这一点。我对此有部分解决方案:我记录已添加到历史堆栈的页面,而不是 router.navigate 我检查页面是否已经在堆栈中,如果它已经在使用 history.go 而不是导航那里, router.navigate 如果没有。在正常情况下工作,但如果用户在应用程序中间重新加载页面,则状态丢失。
标签: javascript mobile backbone.js browser-history zepto