Как отключить турбоссылки на определенной странице?

У меня проблема со скриптом, работающим только при обновлении страницы, поэтому я пытаюсь отключить Turbolinks только для этой страницы. Код ниже не работает. Однако, если я добавлю атрибут «data-no-turbolink» непосредственно в тег body в application.html.erb, он сработает. Как отключить Turbolinks в моем представлении? Я следовал решению, размещенному здесь, Rails 4: отключить Turbolinks в определенном страница, но я не могу заставить ее работать.

У меня установлен драгоценный камень jquery-turbolinks.

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

person ECsAUtaVku    schedule 28.11.2014    source источник
comment
В Turbolinks 5 используйте data-turbolinks="false"   -  person maicher    schedule 24.02.2017


Ответы (6)


Вы можете использовать этот лайнер в своем макете:

<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 загружается, нет проблем... Все, что вам нужно сделать, это добавить прослушиватель к событию загрузки.

$(document).on('turbolinks:load', named_function );
var named_function = function() {
    // thinks to do on document load
}

Вам также не нужно добавлять

$(document).ready(function (){
     // stuff
});

or

$(document).ready(named_function);

Потому что Turbolinks изящно вернется к document load, если страница сильно загружена.

person Ruby Racer    schedule 28.11.2014
comment
Я использовал ваш второй метод, и он отлично работает. Спасибо. - person ECsAUtaVku; 29.11.2014
comment
Если вы используете CoffeeScript, просто замените свою (общую) первую строку $ -> на $(document).on 'turbolinks:load', -> - person sequielo; 14.08.2016
comment
более сексуальный формат: ‹%= link_to Policy, policy_path, data: {'no-turbolink' =› true} %› - person nilid; 26.05.2017
comment
Это все еще действительно для TL5? - person Brad; 09.06.2017
comment
@brad, нижняя часть ответа почти такова. - person Ruby Racer; 09.06.2017
comment
Это не отключает его, это просто подключение к событию загрузки? - person Brad; 09.06.2017
comment
У меня возникают проблемы с тем, что видео html5 все еще загружаются на страницы после турбоссылки, поэтому я хочу отключить ее для этих страниц. - person Brad; 09.06.2017
comment
Вы должны опубликовать вопрос с вашей проблемой. Там должно быть что-то, что можно исправить - person Ruby Racer; 09.06.2017

Для turbolinks 5, если вы используете этот метод, упомянутый выше:

    <%= link_to "Policy", policy_path, :"data-no-turbolink" => true %>

Вам нужно изменить его на:

    <%= link_to "Policy", policy_path, :"data-turbolinks" => false %>
person Stonewall Thomas    schedule 23.07.2017
comment
А в HAML это должно быть :'data-turbolinks' => 'false' - person haffla; 14.02.2018
comment
Вот почему я иногда ненавижу stackoverflow. Ответ устаревшей/старой версии имеет больше голосов и по-прежнему отмечен как лучший ответ. Спасибо, Томас, за разъяснения по turbolinks5! - person Nikita Fedyashev; 22.01.2019

Я пробовал другие методы, упомянутые здесь, безрезультатно, но из документации Turbolinks 5 вы можете вставить этот метатег на страницу, которую вы хотите всегда загружать без Turbolinks.

<meta name="turbolinks-visit-control" content="reload">

Добавление атрибута данных ко всем ссылкам означает, что вы должны знать, где находятся все эти ссылки, что может быть ненадежным, если у вас есть ситуация, когда в пользовательском контенте могут быть встроенные ссылки.

Метод атрибута данных тега тела не сработал для меня, как я ожидал, - я предположил, что загрузка страницы, поддерживаемой турбоссылками, а затем щелчок по ссылке для перехода на страницу, где вы хотите отключить турбоссылки приведет к при полной стандартной загрузке страницы. Похоже, это не так, особенно с кнопкой «Назад» или навигацией по истории.

Добавление этого метатега заставляет Turbolinks 5 выполнить полную перезагрузку страницы, прежде чем он попытается вставить какой-либо контент в dom. Вы получаете эту классическую вспышку пустой страницы, но если, как и я, вы используете внешний Javascript, который должен запускаться без вмешательства Turbolinks, это желаемое поведение.

person stef    schedule 24.02.2018

это будет звучать очень просто

<%- if params[:controller] == 'controller_name' and params[:action] == 'index' %>
  <body data-no-turbolink="true">
<%- else %>
  <body data-no-turbolink="false">
<%- end %>

Я надеюсь, что это поможет.

person Aldo Delgado    schedule 28.11.2014
comment
В Turbolinks5 вместо этого используйте <body data-turbolinks="false">. - person ka2n; 03.09.2016

Для последних Turbolinks я должен добавить оба add:

<meta name="turbolinks-visit-control" content="reload">

в <head> и:

 <body data-turbolinks="false">

вместо тега <body>, чтобы полностью отключить турбоссылки для конкретной страницы.

person Hartator    schedule 02.12.2019

Чтобы отключить турболинк для конкретной ссылки

<a href="/" data-turbolinks="false"></a>
person Saurav Kumar    schedule 19.08.2020