track rails data callbacks javascript ruby-on-rails ruby turbolinks

javascript - data - Rails 4: desactivar Turbolinks en una página específica



turbolinks callbacks (8)

Estoy tratando de hacer que un fragmento de JS funcione en una página concreta con Rails 4 y Turbolinks. Lo he intentado con la solución estándar:

<script type="text/javascript"> var ready = function() { // Bla bla }; $(document).ready(ready); $(document).on(''page:load'', ready); </script>

Pero parece que no funciona. Mi fragmento es algo como esto:

<script type="text/javascript"> function ismready() { var API_KEY = "api key"; var roomId = "room id"; var ism = new Ismuser(API_KEY, roomId); ism.init({ board: { layer: "board" }, video: { camsContainer: "guest" }, chat: { layer: "chat" }, moderator: true, }); } </script> <script src="http://assets.ismuser.com/v0.4/js/ismuser.js" type="text/javascript"></script>

El fragmento no funciona como se esperaba (incluso con la solución estándar) y, finalmente, solo quiero desactivar Turbolinks en esta página.

¿Cómo puedo hacerlo?

- Solución

<% content_for :body do %> <% if controller.controller_name == ''home'' && controller.action_name == ''demo1'' %> <body data-no-turbolink="true"> <% end %> <% end %>


Agregue “data-no-turbolink” to the <body> tag de la página que desea deshabilitar en

Si tiene un archivo de diseño compartido que supongo que tiene, puede hacer una instrucción if y verificar los parámetros [: controller] y params [: acción] y simplemente agregarlo a la única área


Aquí hay una forma alternativa de codificar esto, simplemente elijo qué etiqueta mostrar según el nombre del controlador.

<html> <head></head> <% if controller.controller_name == ''subscriptions'' %> <body data-no-turbolink> <% else %> <body > <% end %> Add the rest of my body here... </body> </html>


Aquí hay una solución más limpia:

En /app/views/layouts/application.html.erb , reemplace la etiqueta <body> con esto:

<body <% if content_for?(:body_attributes) %> <%= yield(:body_attributes) %> <% end %>>

Ahora, si desea desactivar turbolinks en una vista particular, por ejemplo, /app/views/home/index.html.erb , puede agregar esto al archivo:

para Rails 4

<% content_for(:body_attributes) do %> data-no-turbolink="true" <% end %>

y eso terminará representando como:

<body data-no-turbolink="true">

para Rails 5

En Rails 5, la sintaxis es ligeramente diferente:

<% content_for(:body_attributes) do %> data-turbolinks="false" <% end %>

y eso terminará representando como:

<body data-turbolinks="false">


Aquí hay una solución que funciona al deshabilitar turbolinks en la página a la que se vincula un enlace. En este caso, la página ''editar publicación'':

<%= link_to ''Edit'', edit_post_path(@post), ''data-no-turbolink'' => true %>


Esto funcionó.

Donde sea que el enlace sea a la página haz algo como esto

%div{"data-turbolinks" => "false"} = link_to ''Send payment'', new_payments_manager_path(sender_id: current_user.id, receiver_id: @collaboration.with(current_user).id, collaboration_id: params[:id]), class: ''button''


Las soluciones aquí no me funcionaron, resulta que Turbolinks cambió la sintaxis para deshabilitar Turbolinks en una sola página en su nueva versión (5.0.0).

Para deshabilitarlo en una página con Turbolinks 5.0.0+, agregue data-turbolinks="false" a los enlaces de la página que desea deshabilitar:

<a href="/link" data-turbolinks="false">Page without Turbolinks</a>

También funciona en cualquiera de los antecesores de los enlaces, por lo que en este ejemplo, ambos enlaces llevarán a páginas sin turbulencia:

<div data-turbolinks="false"> <a href="/link1">Page without Turbolinks</a> <a href="/link2">Another page without Turbolinks</a> </div>

Para habilitarlo en un solo enlace con todos los otros enlaces deshabilitados en un elemento específico:

<div data-turbolinks="false"> <a href="/link1">Page without Turbolinks</a> <a href="/link2">Another page without Turbolinks</a> <a href="/link3" data-turbolinks="true">Page with Turbolinks enabled</a> </div>

También intenté agregarlo al cuerpo de la página en el que quiero deshabilitarlo, similar al método anterior pero con el uso de data-turbolinks="false" lugar de data-no-turbolink="true" - ¡y eso también funcionó!

Fuente: Turbolinks en GitHub


Para cualquiera ya está usando rieles 5. Si desea deshabilitar turbolink completo para una página específica, simplemente agregue esta línea "data-turbolinks = ''false''" al cuerpo de esa página:

<body data-turbolinks="false">


Solo una versión ligeramente modificada de la respuesta de fearless_fool, que se procesa de forma extraña debido al espacio en blanco y las comillas:

Application.html.erb

<body <%= yield(:body_attributes) %>>

View.html.erb

<%= content_for(:body_attributes, ''data-no-turbolink'') %>