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 %>
無効にするページの“data-no-turbolink” to the <body> tag
を追加します
共有レイアウトファイルがある場合は、ifステートメントを実行してparams [:controller]とparams [:action]を確認し、1つの領域に追加するだけです。
よりクリーンなソリューションを次に示します。
/app/views/layouts/application.html.erb
、<body>
タグとこれ:
<body
<% if content_for?(:body_attributes) %>
<%= yield(:body_attributes) %>
<% end %>>
ここで、特定のビューでターボリンクを無効にしたい場合、例えば/app/views/home/index.html.erb
、これをファイルに追加できます。
<% content_for(:body_attributes) do %>
data-no-turbolink="true"
<% end %>
そして、それは次のようにレンダリングされます:
<body data-no-turbolink="true">
Rails 5では、構文が少し異なります。
<% content_for(:body_attributes) do %>
data-turbolinks="false"
<% end %>
そして、それは次のようにレンダリングされます:
<body data-turbolinks="false">
ここでの解決策はうまくいきませんでした。新しいリリース(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のターボリンク
Fearless_foolの答えをわずかに変更したバージョンで、空白と引用符のために奇妙にレンダリングされます。
Application.html.erb
<body <%= yield(:body_attributes) %>>
View.html.erb
<%= content_for(:body_attributes, 'data-no-turbolink') %>
これをコーディングする別の方法を次に示します。コントローラー名に基づいて、表示するタグを選択するだけです。
<html>
<head></head>
<% if controller.controller_name == 'subscriptions' %>
<body data-no-turbolink>
<% else %>
<body >
<% end %>
Add the rest of my body here...
</body>
</html>
Haml
にRails 5.2.1
を含むソリューションを示します
あなたのapplication.haml
:
%body{data: {turbolinks: (content_for :turbolinks)}}
あなたのtemplate.haml
:
- content_for :turbolinks {"false"}
既にRails 5。
<body data-turbolinks="false">
これはうまくいきました。
リンクがページにある場合は、このようなことをしてください
%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'
リンクがリンクしているページのターボリンクを無効にすることで機能するソリューションを次に示します。この場合、「投稿の編集」ページ:
<%= link_to 'Edit', edit_post_path(@post), 'data-no-turbolink' => true %>