I have an issue with a script only working when refreshing the page and so I'm trying to disable Turbolinks for only that page. The code below doesn't work. However, if I add the "data-no-turbolink" attribute directly to the body tag in application.html.erb it works. How do I disable Turbolinks in my view? I have followed the solution posted here, Rails 4: disable Turbolinks in a specific page but I can't get it to work.
I have the gem 'jquery-turbolinks' installed.
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>
If you're a Rails developer, chances are that you know Turbolinks. Turbolinks is a flexible and lightweight JavaScript library aimed to make your navigation through webpages faster. Turbolinks improves webpage performance by substituting the common full-page loads for partial loads in multi-page applications.
You can use this oneliner in your layout:
<body <%= "data-no-turbolinks='true'".html_safe if controller_name=="pages" && action_name=="policy" %>>
But the other way to do it, which I use mostly, would be to put this chunk of code to the links leading to this page...
So, let's suppose your route is named :policy
, you should do this:
<%= link_to "Policy", policy_path, :"data-no-turbolink" => true %>
Long time has gone, here is an update
Recently, I have started using turbolinks 5.0 beta
, by:
gem 'turbolinks', '~> 5.0.0.beta'
It gets far easier... All document ready
javascript gets loaded, no problem... All you have to do is add a listener to the load event.
$(document).on('turbolinks:load', named_function ); var named_function = function() { // thinks to do on document load }
You don't have to also add
$(document).ready(function (){ // stuff });
or
$(document).ready(named_function);
Because Turbolinks
will gracefully fall back to document load
if the page is hard loaded.
For turbolinks 5 if you use this method mentioned above:
<%= link_to "Policy", policy_path, :"data-no-turbolink" => true %>
You'll need to change it to:
<%= link_to "Policy", policy_path, :"data-turbolinks" => false %>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With