Подтвердить что ты не робот

Rails 4: отключить Turbolinks на определенной странице

Я пытаюсь сделать JSP-фрагмент работы на конкретной странице с Rails 4 и Turbolinks. Я пробовал со стандартным решением:

<script type="text/javascript">

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

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

Но это не работает. Мой фрагмент выглядит примерно так:

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

Фрагмент не работает должным образом (даже со стандартным решением), и, наконец, я просто хочу отключить Turbolinks на этой странице.

Как я могу это сделать?

- Решение

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

Ответ 1

Добавьте "data-no-turbolink" to the <body> tag страницы, которую вы хотите отключить, на

Если у вас есть общий файл макета, который я предполагаю, вы можете сделать оператор if и проверить параметры [: controller] и params [: action] и просто добавить его в одну область

Ответ 2

Здесь более чистое решение:

В /app/views/layouts/application.html.erb замените тег <body> следующим образом:

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

Теперь, если вы хотите отключить turbolinks в определенном виде, например. /app/views/home/index.html.erb, вы можете добавить это в файл:

для Rails 4

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

и это приведет к рендерингу как:

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

для Rails 5

В Rails 5 синтаксис несколько отличается:

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

и это приведет к рендерингу как:

<body data-turbolinks="false">

Ответ 3

Решения здесь не сработали для меня, оказалось, что Turbolinks изменил синтаксис для отключения Turbolinks на одной странице в своей новой версии (5.0.0).

Чтобы отключить его на странице с Turbolinks 5.0.0+, добавьте data-turbolinks="false" к ссылкам страницы, которую вы хотите отключить:

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

Он также работает с любым из предков ссылок, поэтому в этом примере обе ссылки приведут к страницам без турбулинга:

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

Чтобы включить его по одной ссылке со всеми другими ссылками, отключенными в определенном элементе:

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

Я также попытался добавить его в тело страницы, на которой я хочу отключить ее, подобно старому методу, но используя data-turbolinks="false" вместо data-no-turbolink="true" - и это тоже сработало!

Источник: Turbolinks на GitHub

Ответ 4

Просто слегка измененная версия ответа fearless_fool, который из-за белого пространства и кавычек выглядел странно:

Application.html.erb

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

View.html.erb

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

Ответ 5

Вот альтернативный способ кодирования этого, я просто выбираю, какой тег будет отображаться на основе имени контроллера.

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

     Add the rest of my body here...

     </body>
   </html>

Ответ 6

Для тех, кто уже использует рельсы 5. Если вы хотите отключить всю турболинку для конкретной страницы, просто добавьте эту строку "data-turbolinks = 'false" в тело этой страницы:

<body data-turbolinks="false">

Ответ 7

Вот решение, которое работает, отключая turbolinks на странице, на которую ссылается ссылка. В этом случае страница "Редактировать сообщение":

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

Ответ 8

Это сработало.

Где бы ни была ссылка на страницу, сделайте что-то вроде этого

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

Ответ 9

Вот решение в Haml с Rails 5.2.1

В вашем application.haml:

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

В вашем template.haml:

- content_for :turbolinks {"false"}