2013-07-16 39 views
1

好吧我已经谷歌搜索和谷歌搜索,并找不到任何与我的实际问题有关。Backbone.js路由器历史回到初始页面

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

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

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

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

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

这一切工作正常,除了有一个漏洞。

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

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

所以我想知道这听起来是否正确,或者如果我走错了路,骨干也提供任何东西来帮助这种情况,我只是失踪?我不能成为唯一一个试图这样做的人,那么其他人如何解决这个问题呢?

(起初我以为其实有我的代码有问题,而不是实际上这个根本问题,所以我还是要问这个问题弄清楚其他人如何完成这一点)

+0

我正在处理这个问题,好奇你是否想出了任何解决方案。我正在考虑创建一个特殊的“刷新”路线,在这种情况下将服务器渲染它们。 –

+0

这对我来说听起来很不错。如果我想出更好的东西,我会让你知道的。我目前对其进行了重新编写,以便没有可加载骨干网页的页面首先不会使用骨干网。这不太理想,所以我仍然在寻找更好的解决方案,但至少我可以继续前进,稍后再回来。 – byoungb

+0

是的,我结束了客户端渲染页面,这是一个无赖和奇怪的问题。我想这可能与路由器的“root”有关。也许我需要每个'root'多个路由器(在我的情况下,大多数应用程序都是服务器端渲染的,但有几个流程是客户端,需要后退按钮/ URL支持) –

回答

0

您需要定义路线的主页。会发生什么情况是,每次你点击一个链接时,当前URL被推送到pushState的堆栈中,每当你点击后退按钮时,前一个URL就会弹出,Backbone尝试按照它的路线。但是,当您弹出主页网址时,没有匹配的路线,因此Backbone实际上没有做任何事情,从而使内容保持与路线最后一次匹配时的内容相同。

+0

对不起,我没有清楚我的问题,但我有一堆这些网页没有路线,或者更重要的是我没有一个简单的方法来拉动骨干处理的内容。所以我相信这是有效的,但需要我重新整理整个网站,而不仅仅是制作一个快速/ Ajax加载版本的搜索页面。 – byoungb