web-dev-qa-db-fra.com

Rails 4: désactiver les Turbolinks dans une page spécifique

J'essaie de faire fonctionner un extrait JS dans une page concrète avec Rails 4 et Turbolinks. J'ai essayé avec la solution standard:

<script type="text/javascript">

    var ready = function() {
        // Bla bla
    };

    $(document).ready(ready);
    $(document).on('page:load', ready);
</script>

Mais cela ne semble pas fonctionner. Mon extrait est quelque chose comme ça:

<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>

Le fragment ne fonctionne pas comme prévu (même avec la solution standard) et je souhaite enfin désactiver les Turbolinks dans cette page.

Comment puis-je le faire?

-- Solution

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

Ajoutez “data-no-turbolink” to the <body> tag de la page sur laquelle vous souhaitez le désactiver 

Si vous avez un fichier de disposition partagé que je suppose, vous pouvez faire une instruction if et vérifier les paramètres params [: controller] et params [: action] et les ajouter à la zone

46
emcanes

Voici une solution plus propre:

Dans /app/views/layouts/application.html.erb, remplacez la balise <body> par ceci:

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

Désormais, si vous souhaitez désactiver les liens turbolink dans une vue particulière, par exemple /app/views/home/index.html.erb, vous pouvez ajouter ceci au fichier:

pour Rails 4

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

et cela finira par rendre:

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

pour Rails 5

Dans Rails 5, la syntaxe est légèrement différente:

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

et cela finira par rendre:

<body data-turbolinks="false">
60
fearless_fool

Les solutions proposées ici ne fonctionnaient pas pour moi, mais Turbolinks a modifié la syntaxe permettant de désactiver Turbolinks sur une seule page de la nouvelle version (5.0.0).

Pour le désactiver sur une page avec Turbolinks 5.0.0+, ajoutez data-turbolinks="false" aux liens de la page à désactiver:

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

Il fonctionne également sur les ancêtres des liens. Ainsi, dans cet exemple, les deux liens mèneront à des pages non turboliées:

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

Pour l'activer sur un seul lien avec tous les autres liens désactivés dans un élément spécifique:

<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>

J'ai aussi essayé de l'ajouter au corps de la page sur laquelle je veux le désactiver, comme dans l'ancienne méthode, mais avec data-turbolinks="false" au lieu de data-no-turbolink="true" - et ça a fonctionné aussi!

Source: Turbolinks sur GitHub

14
Rani Kheir

Juste une version légèrement modifiée de la réponse de fearless_fool, rendue étrangement à cause des espaces et des citations:

Application.html.erb

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

View.html.erb

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

Voici une autre façon de coder ceci, je choisis juste quelle balise afficher en fonction du nom du contrôleur.

    <html>
      <head></head>
      <% if controller.controller_name == 'subscriptions' %>
        <body data-no-turbolink>
      <% else %>
        <body >
      <% end %>

     Add the rest of my body here...

     </body>
   </html>
3
Coherent

Voici une solution dans Haml avec Rails 5.2.1

Dans votre application.haml:

  %body{data: {turbolinks: (content_for :turbolinks)}}

Dans votre template.haml:

- content_for :turbolinks {"false"}
1
Gerard Simpson

Si quiconque utilise déjà Rails 5. Si vous souhaitez désactiver l'intégralité du turbolink pour une page spécifique, ajoutez simplement cette ligne "data-turbolinks = 'false" "au corps de cette page:

<body data-turbolinks="false">
1
Peter Nguyen

Cela a fonctionné.

Où que ce soit le lien vers la page, faites quelque chose comme ça

  %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'
0
joeyk16

Voici une solution qui fonctionne en désactivant les liens turboliens sur la page à laquelle un lien renvoie. Dans ce cas, la page "modifier le message":

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