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 %>
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
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:
<% content_for(:body_attributes) do %>
data-no-turbolink="true"
<% end %>
et cela finira par rendre:
<body data-no-turbolink="true">
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">
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
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') %>
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>
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"}
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">
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'
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 %>