我遇到一个问题,脚本只在刷新页面时起作用,所以我试图仅为该页面禁用Turbolinks。下面的代码不起作用。但是,如果我将“data-no-turbolink”属性直接添加到application.html.erb中的body标签,则可以正常工作。如何在我的视图中禁用Turbolinks?我已经按照这里发布的解决方案Rails 4: disable Turbolinks in a specific page进行了操作,但我无法让它发挥作用。
我安装了宝石'jquery-turbolinks'。
policy.html.erb
<% content_for :body do %>
<% if controller.controller_name == 'pages' && controller.action_name == 'policy' %>
<body data-no-turbolink="true">
<% end %>
<% end %>
<div class="row">
<div class="small-12 medium-8 large-7 columns end">
<a href="//www.com/" class="nostyle" title="Policy">Policy</a>
<script>(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);
</script>
</div>
</div>
答案 0 :(得分:22)
您可以在布局中使用此oneliner:
<body <%= "data-no-turbolinks='true'".html_safe if controller_name=="pages" && action_name=="policy" %>>
但另一种方法,我主要使用的方法是将这段代码放到通往此页面的链接中......
所以,假设您的路线名为: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
。
答案 1 :(得分:9)
对于turbolinks 5,如果您使用上述方法:
<%= link_to "Policy", policy_path, :"data-no-turbolink" => true %>
您需要将其更改为:
<%= link_to "Policy", policy_path, :"data-turbolinks" => false %>
答案 2 :(得分:5)
这听起来很简单
<%- if params[:controller] == 'controller_name' and params[:action] == 'index' %>
<body data-no-turbolink="true">
<%- else %>
<body data-no-turbolink="false">
<%- end %>
我希望这有帮助。
答案 3 :(得分:1)
我尝试了这里提到的其他方法无济于事,但是从Turbolinks 5文档中,您可以在不使用Turbolinks的情况下在您希望始终加载的页面上插入此元标记。
<meta name="turbolinks-visit-control" content="reload">
向所有链接添加数据属性意味着您必须知道所有这些链接的位置,如果您在用户创建的内容中可能存在内联链接,则这种链接很脆弱。
body标签数据属性方法对我来说不起作用,因为我期望它 - 我假设加载turbolinks支持的页面,然后单击链接转到要禁用的页面turbolinks将导致完整的标准页面加载。情况似乎并非如此,特别是使用后退按钮或历史导航。
添加此元标记会强制Turbolinks 5在尝试将任何内容插入dom之前执行整页重新加载。你得到了一个空白页面的经典闪光,但是如果像我一样,你使用的是需要在不受Turbolinks干扰的情况下发射的外部Javascript,那就是你想要的行为。
答案 4 :(得分:0)
对于最后的Turbolink,我必须添加两个地址:
<meta name="turbolinks-visit-control" content="reload">
在<head>
中:
<body data-turbolinks="false">
代替<body>
标记可完全禁用特定页面的Turbolinks。
答案 5 :(得分:0)
要关闭特定链接的Turbolink
<a href="/" data-turbolinks="false"></a>