Как Jammit обрабатывает вид определенного JavaScript
Я пытаюсь использовать Jammit в своем приложении на Rails.
Конфигурация по умолчанию, представленная в документации, захватывает все js-файлы, включая просмотр конкретного javascript:
embed_assets: on
javascripts:
workspace:
- public/javascripts/vendor/jquery.js
- public/javascripts/lib/*.js
- public/javascripts/views/**/*.js
- app/views/workspace/*.jst
stylesheets:
common:
- public/stylesheets/reset.css
- public/stylesheets/widgets/*.css
workspace:
- public/stylesheets/pages/workspace.css
empty:
- public/stylesheets/pages/empty.css
Рассмотрим случай, когда представление конкретного javascript должно выполняться только для определенного представления:
$(function(){
alert("View specific message here!");
}
Как я могу избежать такого эффекта?
С уважением, Алексей Захаров
2 ответа
Я предпочитаю заключить этот "view-specific-javascript" в функцию. И затем вызовите эту функцию в зависимости от страницы, которую вы на самом деле загружаете. Таким образом, все ваши JavaScripts могут кэшироваться браузерами как один файл, и вы можете выполнять те части JS, которые вам нужны.
Так что я бы добавил <script>
тег к конкретному html.erb
шаблон, который вызывает вашу функцию просмотра при загрузке страницы.
Надеюсь, это поможет...
Я копаю это, чтобы указать альтернативу подходу jashkenas, который состоит в том, чтобы связать поведение только с определенными тегами.
$(function() {
$('#my-view-object').someBehaviour();
}
Так в чем же подвох? Основное отличие состоит в том, что код JS имеет тенденцию быть связанным с определенными объектами, а не страницами. В случае, если вы реорганизуете свои взгляды, вам также придется изменить свой JS. Другая проблема заключается в том, что JS должен находиться внизу страницы, чтобы выжать максимум из браузера. Если вы помещаете записи сценариев в свои представления, то, скорее всего, они окажутся по всей HTML-разметке страницы и замедлят рендеринг.
BR, - Хосе