2016-05-15 4 views
0

У меня есть пара js-файлов в файле application.js. Такие как;Rails-конвейер ресурсов - пользовательские файлы 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 

У меня также есть пара js-кодов на страницах html.erb. Но я хочу, чтобы все js-коды, специфичные для конкретной страницы, были добавлены в 1 файл. Этот файл следует вызывать после загрузки страницы. Потому что некоторые из них используют рубиновый код, такой как init lat lng карт google. Кроме того, пара js-файлов, таких как;

//= require codrops-dialogFx/dialogFx 
    //= require ion-slider/ion.rangeSlider.min 

работает после загрузки страниц. Таким образом, они не работают, поскольку я помещаю их в заголовок как;

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

Так что если я, дизайн application.js as;

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

Затем вызовите <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> в головной метке затем вызвать все остальные 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 %> 
.... 

Существуют ли в рельсах precompiles эти файлы также ?. У меня эти файлы js в файле поставщика.

ответ

1

Да Rails предварительно скомпилирует все файлы, найденные в javascript_include_tag, предполагая, что они могут найти их в вашем пути к ресурсам.

Однако избыточно добавить javascript_include_tag для активов, которые уже объявлены в вашем application.js, так как они фактически загрузятся дважды в ваш HTML.

Если вам необходимо включить активы за пределами нормального пути нагрузки, вы должны сказать Rails прекомпилировать пользовательские файлы в application.rb:

config.assets.precompile << 'path/to/asset' 
+0

Нет, конечно, я буду удалять // = требуется темп/темп. мин, если я так выразился; <% = javascript_include_tag 'темп/темп.мин', 'data-turbolinks-track' => true%>. –

+0

Например, я загрузил индивидуально как; '<% = javascript_include_tag 'темп/темп.min', 'data-turbolinks-track' => true%>'. Теперь он дает ошибку; Атрибут отфильтрован и не будет обслуживаться: добавьте 'Rails.application.config.assets.precompile + =% w (темп/темп.min.js)' в 'config/initializers/assets.rb' и перезагрузите сервер. Так что я должен добавить их все так? –

+0

Да, вот что я имел в виду на последней строке моего ответа. Вы также можете добавлять папки с помощью 'config.assets.paths'. Поэтому, если вы хотите включить все «vendor/assets», вы могли бы сделать: 'config.assets.paths << Rails.root.join ('vendor', 'assets')' –