Turbolinks 多次导致 JavaScript 文件 运行

Turbolinks causes JavaScript file to run several times

我正在使用 Rails 5.1.4,我是这个平台的新手,我遇到了 turboblinks 的问题,我有一个包含 jquery 代码的文件页面加载后必须 运行,但每当页面加载文件 运行s 几次,但当我禁用 turboblinks 时,它会按我想要的方式工作。所以想知道在不关掉turbolinks的情况下有没有少一个修复的。提前谢谢你..

所以有我的布局文件。// app/views/layouts/application.html.erb

<html lang="en">
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <title>Rails web app</title>
   <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-
   track' => true %>
   <%= csrf_meta_tags %>
 </head>
 <body class="<%= controller_name %> <%= action_name %>">
  <%= render 'layouts/header' %>

  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>

  <div class="container">
   <%= yield %>
  </div>

  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true 
  %>
 </body>
</html>

关于我的 js 文件,如您所见,我尝试在页面加载时自动加载带有动画的 bootstrap 模态,实际上当我点击此页面上的任何 link 时就会出现问题这将我带到另一个页面,然后我尝试返回到加载 js 文件的初始页面,然后问题发生了。我看到页面刷新了很多次,还有js文件。

所以我的 js 文件有 jquery 代码。 //app/assets/javascripts/file.js

$(document).ready(function(){
  $('#myModal').on('hide.bs.modal', function (e) {
   $('.modal .modal-dialog').attr('class', 'modal-dialog animated rollOut');
  });
  $('#myModal').on('show.bs.modal', function (e) {
   $('.modal .modal-dialog').attr('class', 'modal-dialog  fadeIn  
    animated');
  });

  $('#myModal').modal('toggle');
});

Turbolinks 替换正文,所以将此行放在您的 head 标签中:

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

像这样:

 <html lang="en">
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <title>Rails web app</title>
   <%= stylesheet_link_tag    'application', media: 'all' %>
   <%= csrf_meta_tags %>
   <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
 </head>
 <body class="<%= controller_name %> <%= action_name %>">
  <%= render 'layouts/header' %>

  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>

  <div class="container">
   <%= yield %>
  </div>
 </body>
</html>

或将 data-turbolinks-eval=false 添加到包含 turbolinks 的脚本标签。

您还需要使用 turbolinks:load 事件:

$(document).on('turbolinks:load', function() {
  $('#myModal').on('hide.bs.modal', function (e) {
   $('.modal .modal-dialog').attr('class', 'modal-dialog animated rollOut');
  });
  $('#myModal').on('show.bs.modal', function (e) {
   $('.modal .modal-dialog').attr('class', 'modal-dialog  fadeIn  
    animated');
  });

  $('#myModal').modal('toggle');
});