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 %>
Ответы
Ответ 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"}