【问题标题】:Backbone.history.start() blocks back button from leaving the pageBackbone.history.start() 阻止后退按钮离开页面
【发布时间】:2013-02-21 10:02:28
【问题描述】:

我现在在一些应用程序上遇到了这个问题,所以我想知道我是否对 Backbone 历史做错了什么。情况是这样的……

我有两页,比如说:

index.html
app.html

索引页面只是一个普通的、平面的 HTML 页面,带有指向app.html 的链接。在 App 页面上,调用Backbone.history.start() 启动哈希状态管理,用于在 App 页面上的两个视图之间切换,例如:

app.html#search
app.html#results

因此,在 #search#results 页面之间来回导航非常有效。那里没有问题。当您尝试使用后退按钮一直返回到index.html 时,会出现此问题。返回索引页面的路径包括在app.html(无哈希状态)处停止,主干路由器在此处尽职尽责地填充缺失的哈希状态,将您带回到app.html#search。同样,单击后退按钮将转到app.html,它会再次填充缺失的哈希状态……基本上,您现在陷入了循环,无法从页面返回。使用推送状态时也会发生同样的行为。

对于在默认页面 URL 之上自动启动自己的路由系统的应用来说,这似乎是一个潜在的常见问题。有谁知道避免这种情况的好方法吗?

【问题讨论】:

    标签: javascript backbone.js browser-history


    【解决方案1】:

    问题是app.html 自己没有做任何事情;因此,如果导航,可能会以某种方式破坏应用程序。

    在这种情况下,您可以做的不是将根路由重定向到另一个,而是将其用作默认页面:

    routes: {
      "": "search",
      "results": "results"
    }
    

    【讨论】:

    • 谢谢,从来没有这样想过。基本 URL 需要作为起点是完全合理的。不幸的是,我们的 UX 规范通常是围绕条件入口点逻辑量身定制的,这从根本上是导致此问题的原因。我会准备好在未来将这个问题扼杀在萌芽状态。
    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多