Rails 4: wyłączenie Turbolinków na określonej stronie
Staram się, aby fragment JS działał na betonowej stronie z Rails 4 i Turbolinkami. Próbowałem ze standardowym rozwiązaniem:
<script type="text/javascript">
var ready = function() {
// Bla bla
};
$(document).ready(ready);
$(document).on('page:load', ready);
</script>
Ale to chyba nie działa. Mój snippet jest coś takiego:
<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>
Fragment nie działa zgodnie z oczekiwaniami (nawet ze standardowym rozwiązaniem) i w końcu chcę wyłączyć Turbolinki na tej stronie.
Jak mogę to zrobić?-- rozwiązanie
<% content_for :body do %>
<% if controller.controller_name == 'home' && controller.action_name == 'demo1' %>
<body data-no-turbolink="true">
<% end %>
<% end %>
8 answers
Dodaj “data-no-turbolink” to the <body> tag
strony, na której chcesz ją wyłączyć
Jeśli masz udostępniony plik układu, który zakładam, że masz, możesz wykonać instrukcję if i sprawdzić params [: controller] i params [: action] i po prostu dodać go do jednego obszaru
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-11 13:34:32
Oto rozwiązanie czyszczące:
W /app/views/layouts/application.html.erb
zastąp znacznik <body>
tym:
<body
<% if content_for?(:body_attributes) %>
<%= yield(:body_attributes) %>
<% end %>>
Teraz, jeśli chcesz wyłączyć turbolinki w określonym widoku, np. /app/views/home/index.html.erb
, możesz dodać to do pliku:
Dla Rails 4
<% content_for(:body_attributes) do %>
data-no-turbolink="true"
<% end %>
I to skończy się renderowaniem jako:
<body data-no-turbolink="true">
Dla Rails 5
W Rails 5 składnia jest nieco inna: <% content_for(:body_attributes) do %>
data-turbolinks="false"
<% end %>
I to skończy się renderowaniem jako:
<body data-turbolinks="false">
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-14 15:27:37
Rozwiązania tutaj nie działały dla mnie, okazało się, że Turbolinks zmienił składnię wyłączania Turbolinks na jednej stronie w nowym wydaniu (5.0.0).
Aby wyłączyć go na stronie z Turbolinks 5.0.0+, dodaj data-turbolinks="false"
do linków strony, którą chcesz wyłączyć:
<a href="/link" data-turbolinks="false">Page without Turbolinks</a>
Działa również na którymś z przodków linków, więc w tym przykładzie oba linki prowadzą do stron nie turbolinkowanych:
<div data-turbolinks="false">
<a href="/link1">Page without Turbolinks</a>
<a href="/link2">Another page without Turbolinks</a>
</div>
Aby włączyć go na jednym linku z wszystkimi innymi linkami wyłączonymi w określonym element:
<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>
Próbowałem również dodać go do treści strony, na której chcę go wyłączyć, podobnie jak stara metoda, ale z użyciem data-turbolinks="false"
zamiast data-no-turbolink="true"
- i to też zadziałało!
Źródło: Turbolinks on GitHub
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-24 19:59:02
Tylko nieco zmodyfikowana wersja fearless_fool ' s answer, która renderowana dziwnie ze względu na białe spacje i cytaty:
Podanie.html.erb
<body <%= yield(:body_attributes) %>>
Widok.html.erb
<%= content_for(:body_attributes, 'data-no-turbolink') %>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-23 01:47:00
Oto alternatywny sposób kodowania tego, po prostu wybieram, który znacznik wyświetlać na podstawie nazwy kontrolera.
<html>
<head></head>
<% if controller.controller_name == 'subscriptions' %>
<body data-no-turbolink>
<% else %>
<body >
<% end %>
Add the rest of my body here...
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-14 03:49:04
Dla każdego, kto już używa rails 5. Jeśli chcesz wyłączyć całe turbolink dla konkretnej strony, po prostu dodaj tę linię " data-turbolinks='false '" do treści tej strony:
<body data-turbolinks="false">
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-04 07:30:02
Oto rozwiązanie, które działa poprzez wyłączenie turbolinków na stronie, do której link się łączy. W tym przypadku strona 'Edytuj post':
<%= link_to 'Edit', edit_post_path(@post), 'data-no-turbolink' => true %>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 19:58:48
To zadziałało.
Gdzie jest link do strony zrób coś takiego
%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'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 10:46:14