RoR 4& TurboLinks 5缓存问题

时间:2017-03-15 08:32:07

标签: ruby-on-rails ajax cart turbolinks

我有一个使用turbolinks5在RoR 4中制作的经典购物车应用程序。用户可以更改给定项目的数量,然后单击"更新购物车"用于更新购物车价值的按钮。

"更新购物车"按钮提交Ajax表单(data-remote =" true")以更新购物车并增加/减少放置在菜单中的购物车项目计数器。

现在问题是:每次用户点击"更新购物车"按钮将缓存购物车的新页面,因此如果用户更新购物车3次,然后点击浏览器"后退按钮"它将显示购物车的三个旧版本(存储在缓存中)。

所以:

  1. 我已经将<meta name="turbolinks-cache-control" content="no-cache">用于购物车页面,这可以解决问题,但这似乎有点矫枉过正。

  2. 我在包含购物车项目计数(data-turbolinks-permanent)的元素上使用了<li class="active" id="cart_total_items" data-turbolinks-permanent>222<\li>但它不起作用,这是,当&#34;后退按钮&#34;单击旧计数而不是新计数。

  3. 如果我对其工作的所有网页使用<meta name="turbolinks-cache-control" content="no-cache">,但显然我想使用网页缓存

  4. 所以知道为什么这不起作用?

    温馨的问候

1 个答案:

答案 0 :(得分:0)

我相信你要找的是Canceling visits before they start

  

应用访问可以在开始之前取消,无论它们是通过链接点击还是调用Turbolinks.visit发起的。

     

监听turbolinks:在访问即将开始时通知之前的访问事件,并使用event.data.url(或$ event.originalEvent.data.url,当使用jQuery时)检查访问的位置。然后通过调用event.preventDefault()来取消访问。

     

恢复访问无法取消,也不会触发turbolinks:访问前。 Turbolinks通过浏览器的后退或前进按钮发出恢复访问以响应已经发生的历史导航。

通过侦听要触发的visit事件并拦截它,可以防止turbolinks缓存页面。