web-dev-qa-db-ja.com

Rails 4:特定のページでターボリンクを無効にする

Rails 4とTurbolinksを使用して、JSスニペットを具体的なページで機能させようとしています。標準ソリューションで試しました。

<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 %>
43
Rubén Jiménez

無効にするページの“data-no-turbolink” to the <body> tagを追加します

共有レイアウトファイルがある場合は、ifステートメントを実行してparams [:controller]とparams [:action]を確認し、1つの領域に追加するだけです。

47
emcanes

よりクリーンなソリューションを次に示します。

/app/views/layouts/application.html.erb<body>タグとこれ:

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

ここで、特定のビューでターボリンクを無効にしたい場合、例えば/app/views/home/index.html.erb、これをファイルに追加できます。

for Rails 4

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

そして、それは次のようにレンダリングされます:

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

for Rails 5

Rails 5では、構文が少し異なります。

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

そして、それは次のようにレンダリングされます:

<body data-turbolinks="false">
66
fearless_fool

ここでの解決策はうまくいきませんでした。新しいリリース(5.0.0)では、Turbolinksが単一ページのTurbolinksを無効にする構文を変更したことがわかりました。

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"を使用して、無効にしたいページの本文に追加しようとしました。

ソース: GitHubのターボリンク

16
Rani Kheir

Fearless_foolの答えをわずかに変更したバージョンで、空白と引用符のために奇妙にレンダリングされます。

Application.html.erb

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

View.html.erb

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

これをコーディングする別の方法を次に示します。コントローラー名に基づいて、表示するタグを選択するだけです。

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

     Add the rest of my body here...

     </body>
   </html>
3
Coherent

HamlRails 5.2.1を含むソリューションを示します

あなたのapplication.haml

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

あなたのtemplate.haml

- content_for :turbolinks {"false"}
2
Gerard Simpson

既にRails 5。

<body data-turbolinks="false">
1
Peter Nguyen

これはうまくいきました。

リンクがページにある場合は、このようなことをしてください

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

リンクがリンクしているページのターボリンクを無効にすることで機能するソリューションを次に示します。この場合、「投稿の編集」ページ:

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