2016-08-14 28 views
0

語境我學習軌道,並試圖創建一個簡單的網頁具有文件按鈕,提交按鈕。當用戶單擊提交按鈕時,瀏覽器應顯示「選擇一個或多個文件」或應顯示所選文件的大小。Rails的 - 兩個Java腳本文件都爲一個控制器生成,因此JS函數執行兩次

問題該網頁被兩次警告相同的消息。例如,如果我不選擇文件並單擊提交,我會收到兩次警報「選擇一個或多個文件」。當我使用調試時,控件遍歷爲控制器生成的JavaScript,並因此顯示消息兩次。

  1. 爲什麼兩個javascript爲控制器的相同coffeescript生成?
  2. 如何從如何產生停止兩個文件?

其他細節

我有一個控制器main_page.I寫了main_page控制器的CoffeeScript。但是,當我啓動網頁時,我可以看到兩個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> 

請讓我知道,如果你需要更多的細節。

EDITED 的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 . 

資產庫快照 - enter image description here

+0

能否請您粘貼'application.js'文件的內容? – Emu

+0

看起來你的'app/assets/javascript'文件夾中有兩個'main_page'文件。 – 2016-08-14 07:20:30

+0

@gen - 我添加了我的庫結構的快照。有一個main_page.js.coffee和一個main_page.js.js。 main_page.js.js是自動生成的js版本的coffeescript。 –

回答

1

如果需要你的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將編譯你的咖啡文件。