Rails 4:在特定页面中禁用Turbolinks

Rub*_*nez 44 javascript ruby ruby-on-rails turbolinks

我正在尝试使用Rails 4和Turbolinks在具体页面中创建JS代码段.我尝试过标准解决方案:

<script type="text/javascript">

    var ready = function() {
        // Bla bla
    };

    $(document).ready(ready);
    $(document).on('page:load', ready);
</script>
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.我的代码片段是这样的:

<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>
Run Code Online (Sandbox Code Playgroud)

该片段无法按预期工作(即使使用标准解决方案),最后我只想在此页面中禁用Turbolinks.

我该怎么做?

- 解决方案

<% content_for :body do %>
    <% if controller.controller_name == 'home' && controller.action_name == 'demo1' %>
        <body data-no-turbolink="true">
    <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

fea*_*ool 67

这是一个更清洁的解决方案:

/app/views/layouts/application.html.erb,<body>用这个替换标签:

<body 
  <% if content_for?(:body_attributes) %>
    <%= yield(:body_attributes) %> 
  <% end %>>
Run Code Online (Sandbox Code Playgroud)

现在,如果要在特定视图中禁用turbolinks,例如/app/views/home/index.html.erb,您可以将其添加到文件中:

对于Rails 4

  <% content_for(:body_attributes) do %>
    data-no-turbolink="true"
  <% end %>
Run Code Online (Sandbox Code Playgroud)

这将最终呈现为:

<body data-no-turbolink="true">
Run Code Online (Sandbox Code Playgroud)

for Rails 5

在Rails 5中,语法略有不同:

  <% content_for(:body_attributes) do %>
    data-turbolinks="false"
  <% end %>
Run Code Online (Sandbox Code Playgroud)

这将最终呈现为:

<body data-turbolinks="false">
Run Code Online (Sandbox Code Playgroud)

  • 我认为,这比接受的答案要清晰得多,特别是如果你有很多控制器和动作.这节省了我的培根两次! (2认同)

小智 47

添加“data-no-turbolink” to the <body> tag要禁用的页面

如果你有一个我假设的共享布局文件,你可以做一个if语句并检查params [:controller]和params [:action]并将它添加到一个区域


Ran*_*eir 17

这里的解决方案对我不起作用,结果发现Turbolinks在新版本(5.0.0)中更改了在单个页面上禁用Turbolinks的语法.

要在Turbolinks 5.0.0+页面上禁用它,请添加data-turbolinks="false"到要禁用的页面的链接:

<a href="/link" data-turbolinks="false">Page without Turbolinks</a>
Run Code Online (Sandbox Code Playgroud)

它也适用于任何链接的祖先,因此在这个例子中,这两个链接都将导致非涡旋链接的页面:

<div data-turbolinks="false">
  <a href="/link1">Page without Turbolinks</a>
  <a href="/link2">Another page without Turbolinks</a>
</div>
Run Code Online (Sandbox Code Playgroud)

要在单个链接上启用它,并在特定元素中禁用所有其他链接:

<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>
Run Code Online (Sandbox Code Playgroud)

我也尝试将它添加到我希望它禁用的页面的主体上,类似于旧方法,但使用data-turbolinks="false"而不是data-no-turbolink="true"- 并且也有效!

资料来源:GitHub上的Turbolinks


Abr*_*ram 11

只是一个稍微修改过的fearless_fool的答案版本,由于空格和引号而呈现出奇怪的结果:

Application.html.erb

<body <%= yield(:body_attributes) %>>
Run Code Online (Sandbox Code Playgroud)

View.html.erb

<%= content_for(:body_attributes, 'data-no-turbolink') %>
Run Code Online (Sandbox Code Playgroud)