2016-08-14 5 views
0

コンテキスト私はレールを学習しており、ファイルボタンと送信ボタンを持つ簡単なWebページを作成しようとしています。ユーザーが[送信]ボタンをクリックすると、ブラウザに「1つまたは複数のファイルを選択」が表示されるか、選択されたファイルのサイズが表示されます。1つのコントローラに2つのjavascriptファイルが生成されているため、js関数が2回実行されています

問題ウェブページで同じメッセージが2回警告されています。例えば、ファイルを選択せず​​にsubmitをクリックすると、「Select one or more files」という警告メッセージが表示されます。デバッグを使用すると、コントローラはコントローラ用に生成されたjavascriptを通過し、メッセージを2回表示します。

  1. コントローラーの同じcoffeescriptで2つのjavascriptが生成されたのはなぜですか?
  2. 2つのファイルの生成を停止するにはどうすればよいですか?

追加の詳細

私はmain_page.Iがmain_pageコントローラ用のCoffeeScriptを書いたコントローラを持っています。私は、Webページを立ち上げたとき、私は開発者向けのツールでチェック2つの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 . 

資産Libのスナップショット - enter image description here

+0

'application.js'ファイルの内容を貼り付けてください。 – Emu

+0

あなたの 'app/assets/javascript'フォルダに2つの' main_page'ファイルがあるようです。 –

+0

@gen - 私は私のライブラリ構造のスナップショットを追加しました。 1つのmain_page.js.coffeeと1つのmain_page.js.jsがあります。 main_page.js.jsは自動生成されたjs版のcoffeescriptです。 –

答えて

1

必要であれば、あなたのapplication.jsで//= require_tree .文は、あなたのapp/assets/javascriptフォルダ内のすべてのファイルを取得し、それをコンパイルします。作成した2つのファイル(main_page)のため、出力にはmain_page.js.self-fce0f72385b89610aec7efdb8340722a1a1c99772f861b071c3e56ffff373e96.jsmain_page.self-08dee8c4f626e100c3f8d2edde72d6a239b69493ee184c06820641df835a4b8c.jsと表示されます。ご覧のとおり、最初のファイルはmain_page.jsで始まり、main_page.js.jsに対応しています。

したがって、main_page.js.jsファイルを削除してください。 Railsはあなたのためにあなたのコーヒーファイルをコンパイルします。

関連する問題