web-dev-qa-db-ja.com

特定のページでターボリンクを無効にする方法は?

ページを更新するときにのみ機能するスクリプトに問題があるため、そのページに対してのみター​​ボリンクを無効にしようとしています。以下のコードは機能しません。ただし、application.html.erbのbodyタグに「data-no-turbolink」属性を直接追加すると、機能します。ビューでターボリンクを無効にするにはどうすればよいですか?私はここに投稿された解決策に従いました Rails 4:特定のページでターボリンクを無効にする しかし、それを機能させることができません。

Gem '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>
19
ECsAUtaVku

このワンライナーをレイアウトで使用できます。

<body <%= "data-no-turbolinks='true'".html_safe if controller_name=="pages" && action_name=="policy" %>>

しかし、私が主に使用するもう1つの方法は、このコードのチャンクをこのページへのリンクに配置することです...

したがって、ルートの名前が: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
});

または

$(document).ready(named_function);

ページがハードロードされている場合、Turbolinksは正常にdocument loadにフォールバックするためです。

22
Ruby Racer

上記のこの方法を使用する場合、ターボリンク5の場合:

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

次のように変更する必要があります。

    <%= link_to "Policy", policy_path, :"data-turbolinks" => false %>
9

これは本当に簡単に聞こえます

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

これがお役に立てば幸いです。

4
Aldo Delgado

ここで言及した他の方法を試しても無駄になりましたが、Turbolinks 5のドキュメントから、Turbolinksなしで常にロードしたいページにこのメタタグを挿入できます。

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

すべてのリンクにデータ属性を追加することは、それらすべてのリンクがどこにあるかを知る必要があることを意味します。これは、ユーザーが作成したコンテンツにインラインリンクがある可能性がある状況では脆弱です。

Bodyタグのデータ属性メソッドが期待どおりに機能しませんでした-ターボリンクがサポートされているページを読み込んでから、リンクをクリックして、ターボリンクを無効にするページに移動すると想定していました。完全な標準ページの読み込み。特に、戻るボタンや履歴ナビゲーションではそうではありませんでした。

このメタタグを追加すると、Turbolinks 5はコンテンツをdomに挿入しようとする前に、ページ全体の再読み込みを強制します。あなたは空白のページのその古典的なフラッシュを取得しますが、私のように、Turbolinksからの干渉なしに起動する必要がある外部Javascriptを使用している、それが望ましい動作です。

1
stef

最後のターボリンクについては、両方を追加する必要があります。

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

<head>および:

 <body data-turbolinks="false">

<body>タグの代わりに、特定のページのターボリンクを完全に無効にします。

0
Hartator