Я согласен с апноэдивингом .. лично, вызовы js.erb добавляют много когнитивных накладных расходов. Что я делаю, это загружаю мои javvavscripts в частичную раскладку
* приложение / просмотров / макеты / _javascripts.html.haml
= javascript_include_tag "https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"
= javascript_include_tag 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js'
= javascript_include_tag "http://yui.yahooapis.com/3.3.0/build/yui/yui-min.js"
= include_javascripts :app
= hoptoad_javascript_notifier
= yield :javascripts
Затем я использую команду jammit
из гема Jammit в минифий и сжимаю мои активы js и css
конфиг / assets.yml
javascripts:
app:
- public/javascripts/rail.js
- public/javascripts/underscore-min.js
- public/javascripts/jquery.dump.js
- public/javascrippts/etc*.js
Для каждой страницы нужны пользовательские js уровня страницы, я добавляю блок content_for :javascripts
внизу страницы:
приложение / просмотров / что-то / awesome.html.haml
%h1 cool page
Other cool stuff
- content_for :javascripts do
:javascript
$(document).ready(function(){
console.log('This document is REaDY!! and, this page rocks');
$.ajax({
url: "#{new_item_path(@item)}", //ruby is evaluated due to string interpolation
success: function(data) {
console.log('Loaded ' + data + ' from ' + #{new_item_path(@item)})
}
});
};
Это позволяет мне перейти к render 'layouts/javascripts'
в нижней части моего application.html.haml
макета, и все мои объекты javascript передаются внизу страницы, так что ускорите загрузку страницы, как , предложенное здесь Yahoo Это также позволяет мне использовать erb для генерации переменных для js уровня страницы из Rails, если необходимо