Как Jammit Grange Просмотр конкретного JavaScript
-
29-09-2019 - |
Вопрос
Я пытаюсь усыновить Джаммит в моем применении рельсов.
Конфигурация по умолчанию, предоставленная в документации, захватывает все файлы 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!");
}
Как я могу избежать такого эффекта?
С уважением, Алексей Захаров
Решение
Я предпочитаю завершить этот «специфичный для представления Javascript» в функции. А затем вызовите эту функцию в зависимости от страницы, которую вы фактически загружаете. Таким образом, все ваши Javascripts могут кэшироваться браузерами в виде единого файла, и вы можете выполнить части JS, которые вам нужны.
Итак, я бы добавил <script>
тег по конкретному html.erb
Шаблон, который вызывает вашу функцию специфической для представления при загрузке страницы.
Надеюсь, это поможет...
Другие советы
Я копаю это, чтобы указать на альтернативу подходу Jashkenas, который заключается в том, чтобы связать поведение только с конкретными тегами.
$(function() {
$('#my-view-object').someBehaviour();
}
Итак, какой улов? Основное отличие состоит в том, что код JS имеет тенденцию быть связанным с определенными объектами, а не страницами. Если вы реорганизуете свои взгляды, вам также придется изменить свой JS. Другая проблема заключается в том, что JS должен быть в нижней части страницы, чтобы выжать максимум из браузера. Если вы вкладываете записи сценариев в свои взгляды, то, скорее всего, они окажутся по всей наценке HTML по всей странице и замедляют рендеринг.
Бр, - Хосе