Javascript无法在rails资产管道中运行

时间:2013-06-19 17:03:10

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

我为js.erb文件中的部分写了一些jQuery。这个jQuery变成了一般函数,我决定加入资产管道而不是assets/javascripts/myfile.js,现在JavaScript不再有效了。我可以从源代码中看到JavaScript被加载到浏览器中,但它只是没有做任何事情,但之前它作为js.erb文件工作。

可能是什么问题?

在application.js中我有

//= require jquery
//= require_tree .

这是我的js:

$(document).ready(function() { 
  $("#close").click(function(){
    $(this).parent().parent().slideUp("slow");
  });


  $(function() {
    $( "#datepicker" ).datepicker({
      dateFormat : "yy-mm-dd"
    });
  });

  var player_count = $("#player option").length;


  $('#btn-add').click(function(){
    $('#users option:selected').each( function() {
      if(player_count >= 8){
        $('#select-reserve').append("<option value='"+$(this).val()+"'>"+$(this).text()+"       </option>");
    $(this).remove();    
      }else{
        $('#player').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");
        $(this).remove();
        player_count++;
      }
    });
  });

  $('#btn-remove').click(function(){
    $('#player option:selected').each( function() {
      $('#users').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");
      $(this).remove();
      player_count--;
    });
  });

  $('#btn-remove-reserve').click(function(){
    $('#select-reserve option:selected').each( function() {
      $('#users').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");
      $(this).remove();
    });
  });

  $("#submit").click(function(){

    $("select option").prop("selected", "selected");

  });
});

我注意到了一个新的开发,js在重新加载后工作。但无论何时第一次进入页面(直接来自链接)它都无法正常工作。

3 个答案:

答案 0 :(得分:4)

这是一个涡轮问题。 解决方案是将我的咖啡包裹在这里:

ready = ->
// functions

$(document).ready(ready)
$(document).on('page:load', ready)

答案 1 :(得分:2)

您的application.js在jQuery之前加载myfile.js。假设此文件仍包含jQuery代码,则由于尚未定义jQuery,因此无法正常运行。您的浏览器的JS控制台是否会出现类似:&#34;未捕获的ReferenceError:$未定义&#34;?

请注意,Rails通常会生成application.js,如下所示:

//= require jquery
//= require jquery_ujs
//= require_tree .

此外,如果myfile.js包含ERB代码,则需要将其重命名为myfile.js.erb,如@Flauwekeul所示。

答案 2 :(得分:0)

我遇到了同样的问题Jason Carty。后来我发现这个问题是因为我有:
= javascript_include_tag“vendor / modernizr”
= javascript_include_tag“application”,“data-turbolinks-track”=&gt;真正
低于“产量”,位于我身体标签的底部。我把它移回到顶部,在样式表之后和“csrt_meta_tags”之前,在我的身体标签之上,现在可以完美地工作。