我正在尝试使用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>
该代码段无法按预期工作(即使使用标准解决方案),最后我只想在此页面中禁用Turbolink。
我该怎么做?
- 解决方案
<% content_for :body do %>
<% if controller.controller_name == 'home' && controller.action_name == 'demo1' %>
<body data-no-turbolink="true">
<% end %>
<% end %>
答案 0 :(得分:62)
这是一个更清洁的解决方案:
在/app/views/layouts/application.html.erb
中,将<body>
标记替换为:
<body
<% if content_for?(:body_attributes) %>
<%= yield(:body_attributes) %>
<% end %>>
现在,如果要在特定视图中禁用turbolink,例如/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">
答案 1 :(得分:47)
添加您要禁用的页面的“data-no-turbolink” to the <body> tag
如果你有一个我假设的共享布局文件,你可以做一个if语句并检查params [:controller]和params [:action]并将它添加到一个区域
答案 2 :(得分:15)
这里的解决方案对我来说没有用,事实证明Turbolinks在新版本(5.0.0)中更改了在单个页面上禁用Turbolinks的语法。
要在Turbolinks 5.0.0+页面上禁用它,请将data-turbolinks="false"
添加到要禁用的页面的链接中:
<a href="/link" data-turbolinks="false">Page without Turbolinks</a>
它也适用于任何链接&#39;祖先,所以在这个例子中,两个链接都会导致非涡旋页面:
<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"
- 这也有效!
答案 3 :(得分:11)
只是一个稍微修改过的fearless_fool的答案,由于空格和引号而奇怪地呈现:
<强> Application.html.erb 强>
<body <%= yield(:body_attributes) %>>
<强> View.html.erb 强>
<%= content_for(:body_attributes, 'data-no-turbolink') %>
答案 4 :(得分:3)
以下是另一种编码方式,我只根据控制器名称选择要显示的标签。
<html>
<head></head>
<% if controller.controller_name == 'subscriptions' %>
<body data-no-turbolink>
<% else %>
<body >
<% end %>
Add the rest of my body here...
</body>
</html>
答案 5 :(得分:1)
对于任何人已经在使用rails 5.如果要为特定页面禁用整个turbolink,只需将此行“data-turbolinks ='false'”添加到该页面的正文中:
<body data-turbolinks="false">
答案 6 :(得分:1)
这是Haml
和Rails 5.2.1
的解决方案
在您的application.haml
中:
%body{data: {turbolinks: (content_for :turbolinks)}}
在您的template.haml
中:
- content_for :turbolinks {"false"}
答案 7 :(得分:0)
这是一个解决方案,通过禁用链接链接到的页面上的turbolinks来工作。在这种情况下,“编辑帖子”页面:
<%= link_to 'Edit', edit_post_path(@post), 'data-no-turbolink' => true %>
答案 8 :(得分:0)
这很有用。
链接到页面的地方做了类似的事情
%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'
答案 9 :(得分:0)
我在Rails 5.2.4.4应用程序中遇到了一种情况,在添加Turbolink之前,我的脚本可以正常工作。我所做的只是在application.js中包含了涡轮链接。这样做破坏了我的工作脚本。我在application.html.erb中做了几件事,以使Turbolink在单个页面上工作。
我将@Coherent的解决方案用于body语句。我还检索了要在我的turbolinks脚本中使用的action和controller值。
<% if params[:action] == "action_name" && params[:controller] == "controller_name" %>
<body data-action='<%= "#{params[:action]}" %>' data-controller='<%= "#{params[:controller]}" %>'>
<% else %>
<body data-turbolinks="false" data-action='<%= "#{params[:action]}" %>' data-controller='<%= "#{params[:controller]}" %>'>
<% end %>
这就是我在开头部分编写我的turbolinks脚本的方式。当我查看源代码时,turbolinks脚本包含在所选页面中。否则,注释将显示在页面上。
<% if params[:action] == "action_name" && params[:controller] == "controller_name" %>
<script>
my turbolinks script logic here
</script>
<% else %>
<!-- some logic here -->
<% end %>
我尝试通过在原始脚本运行的页面上添加data-turbolinks="false"
来禁用每个链接。我无法使它正常工作。我在开头部分添加了以下语句。我在Turbolinks文档中找到了这个here。如果所有其他方法都失败,则此语句似乎有效。
<meta name="turbolinks-visit-control" content="reload">
两个脚本都能正常工作。