rails javascript ruby-on-rails turbolinks

javascript - rails - ¿Cómo deshabilitar Turbolinks en una página específica?



jquery turbolinks rails 5 (4)

Esto va a sonar muy simple

<%- if params[:controller] == ''controller_name'' and params[:action] == ''index'' %> <body data-no-turbolink="true"> <%- else %> <body data-no-turbolink="false"> <%- end %>

Espero que esta ayuda.

Tengo un problema con un script que solo funciona al actualizar la página y, por lo tanto, estoy tratando de deshabilitar Turbolinks solo para esa página. El código de abajo no funciona. Sin embargo, si agrego el atributo "data-no-turbolink" directamente a la etiqueta del cuerpo en application.html.erb, funciona. ¿Cómo deshabilito Turbolinks en mi vista? He seguido la solución publicada aquí, Rails 4: deshabilite Turbolinks en una página específica, pero no puedo hacer que funcione.

Tengo la gema ''jquery-turbolinks'' instalada.

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>


Intenté los otros métodos mencionados aquí sin éxito, pero desde los documentos de Turbolinks 5, puede insertar esta etiqueta meta en la página que desea cargar siempre sin Turbolinks.

<meta name="turbolinks-visit-control" content="reload">

Agregar un atributo de datos a todos los enlaces significa que debe saber dónde están todos esos enlaces, lo cual es frágil si tiene una situación en la que podría haber enlaces en línea en el contenido creado por el usuario.

El método de atributo de datos de etiqueta de cuerpo no funcionó para mí como lo esperaba: habría asumido que cargar una página compatible con turbolinks y luego hacer clic en un enlace para ir a una página en la que desea deshabilitar turbolinks resultaría en una carga de página completa, estándar. Ese no parece ser el caso, especialmente con el botón de retroceso o la navegación de historial.

La adición de esta metaetiqueta obliga a Turbolinks 5 a realizar una recarga de página completa antes de que intente insertar cualquier contenido en el dom. Obtiene el flash clásico de una página en blanco, pero si, como yo, está usando un Javascript externo que debe activarse sin interferencias de Turbolinks, ese es el comportamiento deseado.


Para turbolinks 5 si utiliza este método mencionado anteriormente:

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

Tendrá que cambiarlo a:

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


Puedes usar este oneliner en tu diseño:

<body <%= "data-no-turbolinks=''true''".html_safe if controller_name=="pages" && action_name=="policy" %>>

Pero la otra forma de hacerlo, que uso en su mayoría, sería poner esta porción de código en los enlaces que conducen a esta página ...

Entonces, supongamos que su ruta se llama :policy , debe hacer esto:

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

Ha pasado mucho tiempo, aquí hay una actualización

Recientemente, comencé a usar turbolinks 5.0 beta , por:

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

Se vuelve mucho más fácil ... Todo el document ready javascript se carga, no hay problema ... Todo lo que tienes que hacer es agregar un escucha al evento de carga.

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

No tienes que añadir también

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

o

$(document).ready(named_function);

Debido a que Turbolinks regresará con gracia a la document load si la página está cargada.