为什么rails require_tree只适用于1个javascript文件?

时间:2014-07-13 23:00:51

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

我有以下清单:

// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
//
//= require_self
//= require jquery-1.7.2.min
//= require jquery-ui-1.8.22.custom.min
//= require default_on_first_input_field
//= require row_shading
//= require long_or_short_details
//= require sortable_hook
//= require date-picker
//= require rails

并且所有的javascript工作正常。因此row_shadinglong_or_short_details切换,date-pickerdefault_on_first_input_field都按预期工作。

我想改为使用require_tree,如:

//= require_tree
//= require_self

当我这样做并重启我的服务器时,只有date-picker工作 其他人 - row_shadingdefault_on_first_fieldlong_or_short_details不起作用,除非我在清单中单独列出它们,即使我在尝试仅使用{{1}时在标题中列出它们}:

require_tree

我认为这可能是一个订购问题,所以我尝试了

  <script src="/assets/date-picker.js?body=1" type="text/javascript"></script>
  <script src="/assets/default_on_first_input_field.js?body=1" type="text/javascript"></script>
  <script src="/assets/jquery-1.7.2.min.js?body=1" type="text/javascript"></script>
  <script src="/assets/jquery-ui-1.8.22.custom.min.js?body=1" type="text/javascript"></script>
  <script src="/assets/long_or_short_details.js?body=1" type="text/javascript"></script>
  <script src="/assets/rails.js?body=1" type="text/javascript"></script>
  <script src="/assets/row_shading.js?body=1" type="text/javascript"></script>
  <script src="/assets/sortable_hook.js?body=1" type="text/javascript"></script>
  <script src="/assets/application.js?body=1" type="text/javascript"></script>

并且首先使用//= require jquery-1.7.2.min //= require jquery-ui-1.8.22.custom.min //= require default_on_first_input_field //= require_tree //= require_self jquery进行更好的排序,如:

jquery-ui

但是 <script src="/assets/jquery-1.7.2.min.js?body=1" type="text/javascript"></script> <script src="/assets/jquery-ui-1.8.22.custom.min.js?body=1" type="text/javascript"></script> <script src="/assets/default_on_first_input_field.js?body=1" type="text/javascript"></script> <script src="/assets/date-picker.js?body=1" type="text/javascript"></script> <script src="/assets/long_or_short_details.js?body=1" type="text/javascript"></script> <script src="/assets/rails.js?body=1" type="text/javascript"></script> <script src="/assets/row_shading.js?body=1" type="text/javascript"></script> <script src="/assets/sortable_hook.js?body=1" type="text/javascript"></script> <script src="/assets/application.js?body=1" type="text/javascript"></script> 的javascript,default_on_first_input_field long_or_short_details`并没有做任何事情?

日期选择器看起来像这样:

row_shading and

而row_shading(例如)看起来像:

$(function() {
$( "#datepicker" ).datepicker();
});
$(function(){
var dateInput = $("#datepicker");
var format = 'yy-mm-dd';
dateInput.datepicker({dateFormat: format});
dateInput.datepicker('setDate', $.datepicker.parseDate(format, dateInput.val()));
});

2 个答案:

答案 0 :(得分:1)

尝试

//= require_tree .

我认为你错过了.

答案 1 :(得分:1)

当您拥有依赖项时,包含JS文件的顺序非常重要。当您使用require_tree所需的订单时,文件将包含在按字母顺序中。即通常你想首先包含jquery和jquery-ui,这是你在手动包含文件时所做的事情。

如果你真的想使用require_tree,请确保文件名是满足所有依赖关系的,所以如果default_on_first_input_field依赖于jquery,那么将default_on_first_input_field重命名为m_default_on_first_input_field以使其工作。

但这是解决这个问题的非常复杂的方法,所以理想情况下你应该通过单独要求所有文件来手动列出依赖关系。