【问题标题】:Backbone.js Router history back to initial pageBackbone.js 路由器历史回到初始页面
【发布时间】:2013-07-16 14:06:50
【问题描述】:

好的,我已经用谷歌搜索和搜索,但找不到与我的实际问题相关的任何内容。

基本上我有一个简单的路由器,其中定义了一些路由,如果直接调用,所有这些路由都可以由服务器直接呈现。

所以主干历史是这样调用的。

Backbone.history.start({
    'pushState': true,
    'silent': true
});

然后我有一个简单的非常简单的导航

this.navigate($(event.currentTarget).attr('href'), {
    'trigger': true
});

这一切正常,除了一个缺陷。

假设您从我没有为其定义主干路由的站点的主页开始,然后单击站点上使用主干路由器的几个链接,您将被路由到正确的页面,一切正常很好,但是当您单击浏览器的后退按钮返回主页时,您最终会看到第一个主干路由的内容,而不是实际主页的内容。

所以我意识到我需要存储初始页面内容,以便一旦我检测到我回到与路由器中的路由不匹配的初始页面,我就可以将它们重新插入页面,然后从那里我需要在我的页面的存储版本中重新加载。

所以我想知道这听起来是否正确,或者我是否走错了路,主干是否也能提供任何帮助解决我刚刚错过的这种情况?而且我不可能是唯一一个尝试这样做的人,那么其他人是如何解决这个问题的?

(最初我以为我的代码确实有问题,而不是这个根本问题,所以我仍然想问这个问题,以了解其他人是如何做到的)

【问题讨论】:

  • 我现在正在处理这个问题,想知道你是否想出了任何解决方案。我正在考虑创建一个特殊的“刷新”路由,在这些情况下服务器会渲染它们。
  • 这对我来说听起来不错。如果我想出更好的方法,我会告诉你的。我目前对其进行了重新设计,以便没有可加载主干页面的页面首先不会使用主干。它不太理想,所以我仍在寻找更好的解决方案,但至少我可以继续前进,稍后再回来。
  • 是的,我最终在客户端渲染页面,这有点令人沮丧和奇怪的问题。我想这可能与路由器的root 有关。也许我每个root 需要多个路由器(在我的情况下,大多数应用程序是服务器端呈现的,但一些流程是客户端的,需要后退按钮/URL 支持)

标签: backbone.js


【解决方案1】:

您需要为主页定义一个路由。发生的情况是,每次您点击链接时,当前 URL 都会被推送到 pushState 的堆栈中,并且每次您点击后退按钮时,前一个 URL 都会被弹出,并且 Backbone 会尝试遵循它的路线。但是,当您弹出主页 URL 时,它没有匹配的路由,因此 Backbone 实际上并没有做任何事情,将内容保留为最后一次真正匹配的路由。

【讨论】:

  • 对不起,我没有在我的问题中说清楚,但我有一堆没有路由的页面,或者更重要的是,我没有一个简单的方法可以将内容拉到主干处理。所以我确信这可行,但需要我重新设计整个网站,而不仅仅是制作我的搜索页面的快速/ajax 加载版本。
猜你喜欢
  • 2012-06-27
  • 2020-12-13
  • 2012-07-19
  • 2016-05-06
  • 2012-11-10
  • 2012-05-07
  • 2015-01-12
  • 2013-08-29
  • 2021-08-14
相关资源
最近更新 更多