如何在特定页面中禁用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,这就是你想要的行为。