Rails资产管道 - 自定义js文件

时间:2016-05-15 12:41:51

标签: javascript jquery ruby-on-rails assets

我在application.js文件中有几个js文件。如;

//= require jquery
//= require jquery_ujs
//= require dropzone
//= require jquery.cookie
//= require toastr

//VENDOR JS BEGINS
//= require pace/pace.min

//= require modernizr.custom
//= require jquery-ui/jquery-ui.min
//= require boostrapv3/js/bootstrap.min
//= require jquery/jquery-easy
//= require jquery-unveil/jquery.unveil.min
//= require jquery-bez/jquery.bez.min
//= require jquery-ios-list/jquery.ioslist.min
//= require jquery-actual/jquery.actual.min
//= require jquery-scrollbar/jquery.scrollbar.min
//= require bootstrap-select2/select2.min
//= require switchery/js/switchery.min
//= require imagesloaded/imagesloaded.pkgd.min
//= require jquery-isotope/isotope.pkgd.min
//= require classie/classie
//= require codrops-stepsform/js/stepsForm
//= require bootstrap-datepicker/js/bootstrap-datepicker
//= require bootstrap-datepicker/js/locales/bootstrap-datepicker.tr.js
//= require bootstrap-datepicker/js/locales/bootstrap-datepicker.en.js
//= require summernote/js/summernote.min
//= require moment/moment-with-locales.min
//= require bootstrap-daterangepicker/daterangepicker
//= require bootstrap-timepicker/bootstrap-timepicker.min
//= require codrops-dialogFx/dialogFx
//= require ion-slider/ion.rangeSlider.min
//= require owl-carousel/owl.carousel.min

我在html.erb页面中也有几个js代码。但我想将所有页面特定的js代码放入1个文件中。应在页面加载后调用此文件。因为其中一些使用ruby代码,例如google maps的init lat lng。此外,还有几个js文件,如;

    //= require codrops-dialogFx/dialogFx
   //= require ion-slider/ion.rangeSlider.min 
页面加载后

工作。因此,它们不起作用,因为我把它们标记为;

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>    

所以如果我,将application.js设计为;

//= require jquery
//= require jquery_ujs
//= require dropzone
//= require jquery.cookie
//= require toastr

然后在head标签中调用<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>,然后调用body标签中的所有其他js文件,如

<%= javascript_include_tag 'pace/pace.min', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'modernizr.custom', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'jquery-ui/jquery-ui.min', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'boostrapv3/js/bootstrap.min', 'data-turbolinks-track' => true %>
....

rails是否也会预编译这些文件?我在供应商文件中有这些js文件。

1 个答案:

答案 0 :(得分:1)

是的Rails会预先编译它在db.users.aggregate.aggregate([{ $unwind: '$tasks' }, { $match: { email: req.user.email, 'tasks.done': true } }, { $group: { _id: null, tasks: { $push: '$tasks' } } }]); 中找到的所有文件,假设它可以在资产路径中找到它们。

但是,为javascript_include_tag中已声明的资产添加javascript_include_tag是多余的,因为它们实际上会在您的HTML中加载两次。

如果您需要在正常加载路径之外包含资源,则需要告诉Rails在您的application.rb中预编译您的自定义文件:

application.js