Как отключить Турболин-ки на конкретной странице?
У меня проблема со скриптом, работающим только при обновлении страницы, и поэтому я пытаюсь отключить Turbolinks только для этой страницы. Приведенный ниже код не работает. Однако, если я добавлю атрибут "data-no-turbolink" непосредственно к тегу body в приложении.формат html.erb это работает. Как отключить Турболин-Ки в моем представлении? Я следовал решению, опубликованному здесь, Rails 4: отключить Турболин-ки на определенной странице , но я не могу заставить его работать.
У меня есть драгоценный камень 'jquery-turbolinks' установленный.
Политика.формат html.erb
<% content_for :body do %>
<% if controller.controller_name == 'pages' && controller.action_name == 'policy' %>
<body data-no-turbolink="true">
<% end %>
<% end %>
<div class="row">
<div class="small-12 medium-8 large-7 columns end">
<a href="//www.com/" class="nostyle" title="Policy">Policy</a>
<script>(function (w,d) {var loader = function () {var s = d.createElement("script"), tag = d.getElementsByTagName("script")[0]; s.src = "//cdn.java.com/java.js"; tag.parentNode.insertBefore(s,tag);}; if(w.addEventListener){w.addEventListener("load", loader, false);}else if(w.attachEvent){w.attachEvent("onload", loader);}else{w.onload = loader;}})(window, document);
</script>
</div>
</div>
4 ответа:
Вы можете использовать этот oneliner в вашем макете:
Но другой способ сделать это, который я использую в основном, заключается в том, чтобы поместить этот кусок кода на ссылки, ведущие на эту страницу...<body <%= "data-no-turbolinks='true'".html_safe if controller_name=="pages" && action_name=="policy" %>>
Итак, предположим, что ваш маршрут называется
:policy
, Вы должны сделать следующее:<%= link_to "Policy", policy_path, :"data-no-turbolink" => true %>
Прошло много времени, вот обновление
Недавно я начал использовать
turbolinks 5.0 beta
, по:gem 'turbolinks', '~> 5.0.0.beta'
Это становится намного проще... Все
document ready
javascript загружается, никаких проблем... Все, что вам нужно сделать, это добавить прослушиватель для события load.$(document).on('turbolinks:load', named_function ); var named_function = function() { // thinks to do on document load }
Вам не нужно также добавлять
$(document).ready(function (){ // stuff });
Или
$(document).ready(named_function);
Потому что
Turbolinks
изящно вернется кdocument load
, если страница сильно загружена.
Для турболин 5, Если вы используете этот метод, упомянутый выше:
<%= link_to "Policy", policy_path, :"data-no-turbolink" => true %>
Вам нужно изменить его на:
<%= link_to "Policy", policy_path, :"data-turbolinks" => false %>
Это будет звучать очень просто
<%- if params[:controller] == 'controller_name' and params[:action] == 'index' %> <body data-no-turbolink="true"> <%- else %> <body data-no-turbolink="false"> <%- end %>
Я надеюсь на эту помощь.
Я попробовал другие методы, упомянутые здесь, безрезультатно, но из документов Turbolinks 5 Вы можете вставить этот мета-тег на страницу, которую вы хотите всегда загружать без Turbolinks.
<meta name="turbolinks-visit-control" content="reload">
Добавление атрибута данных ко всем ссылкам означает, что вы должны знать, где находятся все эти ссылки, что является хрупким, если у вас есть ситуация, когда могут быть встроенные ссылки в пользовательском контенте.
Метод атрибутов данных тега тела не работал для меня, как я ожидал - я бы предположил что загрузка страницы, поддерживаемой turbolinks, а затем переход по ссылке на страницу, где вы хотите отключить turbolinks, приведет к полной стандартной загрузке страницы. Казалось, что это не так, особенно с кнопкой Назад или навигацией по истории.
Добавление этого мета-тега заставляет Turbolinks 5 выполнить полную перезагрузку страницы, прежде чем он попытается вставить какой-либо контент в dom. Вы получаете классическую вспышку пустой страницы, но если вы, как и я, используете внешний Javascript, который должен срабатывать без помехи от Турболин-вот желаемое поведение.