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 %>
Author: Arslan Ali, 2014-03-11

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

 46
Author: emcanes,
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">
 55
Author: fearless_fool,
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

 13
Author: Rani Kheir,
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') %>
 11
Author: Abram,
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>
 3
Author: Coherent,
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">
 1
Author: Peter Nguyen,
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 %>
 0
Author: johnthekline,
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'
 0
Author: joeyk16,
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