Rails资产管道编译js错误

时间:2014-02-18 13:48:02

标签: javascript ruby-on-rails asset-pipeline production

当我处于开发模式时,一切正常,我有以下.js导入顺序:

<!-- Scripts -->
<script src="/assets/jquery/jquery.min.js?body=1"></script>
<script src="/assets/jquery-ujs/src/rails.js?body=1"></script>
<script src="/assets/1modernizr.custom.js?body=1"></script>
<script src="/assets/2rainyday.0.1.2.min.js?body=1"></script>
<script src="/assets/3xrain_init_youtube.js?body=1"></script>
<script src="/assets/3xxbootstrap.min.js?body=1"></script>
<script src="/assets/4classie.js?body=1"></script>
<script src="/assets/5modalEffects.js?body=1"></script>
<script src="/assets/6jquery.placeholder.js?body=1"></script>
<script src="/assets/7jquery.custom.js?body=1"></script>
<script src="/assets/8script.js?body=1"></script>
<script src="/assets/application.js?body=1"></script>
<script>

    $(document).ready(function(){
        $("#countdown").countdown({
                    date: "3 march 2014 12:00:00",
                    format: "on"
                },

                function() {
                    // callback function
                });
    });

</script>

在制作中,它如下所示:

<!-- Scripts -->
<script src="/assets/application-afbc85ff07d9057a50dee5713b8bccdf.js"></script>
<script>

    $(document).ready(function(){
        $("#countdown").countdown({
                    date: "3 march 2014 12:00:00",
                    format: "on"
                },

                function() {
                    // callback function
                });
    });

</script>

问题是我在生产模式中遇到了一些我无法理解的错误。第一个错误是:

Uncaught TypeError: Object [object Object] has no method 'countdown'

对countdown的调用是在导入application.js之后,为什么会这样?是否有可能在application.js之前执行内联脚本?如果是这样,为什么在分离文件的开发中不会发生这种情况?

第二个错误是:

Uncaught TypeError: Cannot call method 'addEventListener' of null 

更新

如果我放了一个setInterval我解决了第一个错误,就像这样:

<script>
    $(document).ready(function(){
        setInterval(1000, function(){
              $("#countdown").countdown({
                  date: "3 march 2014 12:00:00",
                  format: "on"
                  },

                  function() {
                            // callback function
                  }
              );

        });
   });

</script>

所以我认为内联脚本首先被执行。这很奇怪。

1 个答案:

答案 0 :(得分:4)

由于之前的错误,您看到了错误:Uncaught TypeError: Cannot call method 'addEventListener' of null

这在生产中发生,因为所有JS都在一个文件中,如果有错误,则其余部分不会执行。它在开发中有效,因为5modalEffects.js是一个单独的文件,因此该文件中的错误不会影响任何其他文件。

我设法通过将.md-close类添加到div#modal-1内的关闭模式按钮来修复模态错误,这解决了另一个问题:)