Rails 4 CoffeeScript在预编译时不执行

时间:2016-06-13 17:49:36

标签: javascript ruby-on-rails ruby-on-rails-4 coffeescript asset-pipeline

我有一个带有一些Coffeescript的Rails 4应用程序,主要用于在另一个列表中选择项目时更新列表 - 非常基本的东西。

该脚本在开发中完美运行。但是,只要它被预编译,即使我在预编译资产文件中看到实际代码,它也根本不会运行。

我将代码缩减到一个非常小的范围,所以它只是在组合框被更改但仍然不能正常工作时显示警告。我还从assets / javascript目录中删除了所有.coffee文件,只保留了一个Coffeescript文件和application.js文件,以确保与其他.coffee文件没有冲突。

我也对turbolinks有所怀疑,然后我将其删除,但仍未改变。

的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 bootstrap-sprockets
//= require_tree .

attendance.coffee

  $('#season_id').on "change", ->
     alert('Success!')

来自app / views / attendances / _form.html.erb

的表单
<div class="container">
    <form action="/attendances/get_attendance_sheet" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" />       <table class="table">
            <tr>
                <td>Saison:</td>
                <td><select name="season_id" id="season_id" class="form-control"><option value="">Choisir une saison</option><option value="1">Gadbois 2015</option></select></td>
                <td>Entraînement du:</td>
                <td><select name="session_id" id="session_id" class="form-control"><option value="">Choisir une date d&#39;entraînement</option><option value=""></option></select></td>
                <td><input type="submit" name="commit" value="Ouvrir" class="btn btn-success" /></td>
            </tr>
        </table>
</form></div>

2 个答案:

答案 0 :(得分:1)

终于找到了问题,非常感谢@itsnikolay。问题是由于另一个javascript文件抛出异常的事实。通过将它们全部编译成一个文件,异常将使整个脚本停止运行,从而不执行Coffescripts。

在这种特殊情况下,由于缺少gem rails-assets-tether来提供来自bootstrap库的工具提示。

当处于调试模式时,由于所有javascript文件都是独立加载的,因此一个文件中的异常不会影响加载其他文件。

答案 1 :(得分:0)

检查已编译的javascript文件(http://yousite.net/application-[DIGEST].js。是否有season_id?如果season_id存在,请尝试更改您的代码:

$ ->
  $('#season_id').on "change", ->
     alert('Success!')