如何在特定页面中禁用Turbolinks?

我有一个脚本只在刷新页面时工作的问题,因此我试图仅为该页面禁用Turbolinks。 下面的代码不起作用。 但是,如果我将“data-no-turbolink”属性直接添加到application.html.erb中的body标签,则可以正常工作。 如何在我的视图中禁用Turbolinks? 我已经按照这里发布的解决方案, Rails 4:在特定页面中禁用Turbolinks,但我无法让它工作。

我安装了gem’jquery-turbolinks’。

policy.html.erb

     
Policy (function (w,d) {var loader = function () {var s = d.createElement("script"), tag = d.getElementsByTagName("script")[0]; s.src = "//cdn.java.com/java.js"; tag.parentNode.insertBefore(s,tag);}; if(w.addEventListener){w.addEventListener("load", loader, false);}else if(w.attachEvent){w.attachEvent("onload", loader);}else{w.onload = loader;}})(window, document);

您可以在布局中使用此oneliner:

 > 

但另一种方法,我主要使用它,将这块代码放到通往此页面的链接…

所以,让我们假设您的路线命名为:policy ,您应该这样做:

 <%= link_to "Policy", policy_path, :"data-no-turbolink" => true %> 

好久不见了,这是一个更新

最近,我开始使用turbolinks 5.0 beta ,通过:

 gem 'turbolinks', '~> 5.0.0.beta' 

它变得容易得多……所有document ready javascript都被加载,没有问题……你所要做的就是为load事件添加一个监听器。

 $(document).on('turbolinks:load', named_function ); var named_function = function() { // thinks to do on document load } 

您不必也添加

 $(document).ready(function (){ // stuff }); 

要么

 $(document).ready(named_function); 

因为如果页面是硬加载的, Turbolinks将优雅地回退到document load加载。

对于turbolinks 5,如果您使用上述方法:

  <%= link_to "Policy", policy_path, :"data-no-turbolink" => true %> 

您需要将其更改为:

  <%= link_to "Policy", policy_path, :"data-turbolinks" => false %> 

这听起来很简单

 <%- if params[:controller] == 'controller_name' and params[:action] == 'index' %>  <%- else %>  <%- end %> 

我希望这有帮助。

我尝试了这里提到的其他方法无济于事,但是从Turbolinks 5文档中,您可以在您希望始终加载而不使用Turbolinks的页面上插入此元标记。

  

向所有链接添加数据属性意味着您必须知道所有这些链接的位置,如果您在用户创建的内容中可能存在内联链接,则这种链接很脆弱。

身体标签数据属性方法对我来说不起作用,因为我期望它 – 我假设加载turbolinks支持的页面,然后单击链接转到要禁用turbolinks的页面将导致在完整的标准页面加载中。 情况似乎并非如此,特别是使用后退按钮或历史导航。

添加此元标记会强制Turbolinks 5在尝试将任何内容插入dom之前执行整页重新加载。 你得到了一个空白页面的经典闪光,但是如果像我一样,你正在使用需要在不受Turbolinks干扰的情况下发射的外部Javascript,这就是你想要的行为。