Rails - 为一个控制器生成了两个 javascripts 文件,因此 js 函数执行了两次

Rails - two javascripts files are generated for one controller and hence js function is executing twice

Context 我正在学习 rails 并尝试创建一个包含文件按钮和提交按钮的简单网页。当用户单击提交按钮时,浏览器应显示 "Select one or more files" 或显示文件大小 selected.

问题 网页提示同一条消息两次。例如,如果我没有 select 文件并单击提交,我会收到警报 "Select one or more files" twice.When 我使用了调试,控件遍历了为生成的 javascript控制器,因此显示消息两次。

  1. 为什么控制器的同一个 coffeescript 生成了两个 javascript?
  2. 如何阻止生成两个文件?

其他详细信息

我有一个控制器 main_page.I 为 main_page 控制器写了一个咖啡脚本。但是,当我启动网页时,我可以看到两个 javascript 文件

<script src="/assets/main_page.js.self-fce0f72385b89610aec7efdb8340722a1a1c99772f861b071c3e56ffff373e96.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/main_page.self-08dee8c4f626e100c3f8d2edde72d6a239b69493ee184c06820641df835a4b8c.js?body=1" data-turbolinks-track="true"></script>

我查看了开发者工具,两者的 javascript 代码相同。

coffeescript 代码如下 -

@checkFileSize = ->

x = document.getElementById("file_tag")
if 'files' of x
  if x.files.length is 0
    txt = "Select one or more files."
  else
    for item in x.files
      if 'size' in item
        txt += "size: " + file.size + " bytes <br>"
  alert txt

$ ->
  $("#submit_tag").click (e) ->
    e.preventDefault();
    checkFileSize()

application.html.erb

 <!DOCTYPE html>
 <html>
   <head>
     <title>Learning Rails</title>
     <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
     <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
     <%= csrf_meta_tags %>
   </head>
   <body>
     <%= yield %>=
   </body>
 </html>

如果您需要更多详细信息,请告诉我。

已编辑 application.js

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details  
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require raphael
//= require morris
//= require_tree .

资产库快照 -

如果需要,application.js 中的 //= require_tree . 语句将获取 app/assets/javascript 文件夹中的每个文件并进行编译。由于您创建了两个 main_page 文件,因此您还在输出中将它们作为 main_page.js.self-fce0f72385b89610aec7efdb8340722a1a1c99772f861b071c3e56ffff373e96.jsmain_page.self-08dee8c4f626e100c3f8d2edde72d6a239b69493ee184c06820641df835a4b8c.js。如您所见,第一个文件以 main_page.js 开头,对应于您的 main_page.js.js.

因此,只删除main_page.js.js个文件。 Rails 将为您编译咖啡文件。