Изоляция файлов JS для просмотра в Rails

В моем приложении Rails у меня есть ряд JS-файлов, которые я хотел бы всегда иметь в наличии , и разместил ихapp/assets/javascripts/globals, компилируя их из application.jsvia //= require_tree ./globals.

Тем не менее, у меня есть некоторые файлы JS, которые специфичны для представления, и я предпочел бы, чтобы они были реализованы только для определенных представлений или контроллеров. В настоящее время они скомпилированы в config/initializers/assets.rbvia Rails.application.config.assets.precompile += %w( foo.js bar.js )и доступны <%= javascript_include_tag "foo/bar", "data-turbolinks-track" => true %>в соответствующих представлениях.

Я обернул основные функции в foo.js& bar.jsв conditionals, такие какif $("#foo").length > 1 ..., который предотвращает их функциональность, если необходимые дивы не присутствуют.

В результате JS-файлы становятся «активными» только после посещения представления. Однако после посещения код JS «активен» даже после посещения другого представления. Существует ли механизм управления, который гарантирует, что код JS читается только для коррелирующих представлений?

1 ответ

  1. http://brandonhilkert.com/blog/page-specific-javascript-in-rails/
    http://brandonhilkert.com/blog/organizing-javascript-in-rails-application-with-turbolinks/

    Вот как я реализовал view specific, хотя это настоящая боль.

    По сути, вы будете создавать пространство имен сценариев, содержащее сценарии, которые запускаются всегда или только на определенных контроллерах или даже действиях.

    Рельсы также обеспечивают путь делать специфический регулятора.
    http://guides.rubyonrails.org/asset_pipeline.html#controller-specific-assets

    Я бы честно попробовать это вместо того, как это довольно просто. Я также предполагаю, глядя на реализацию, что вы могли бы легко сделать действие на основе, а также.

    Что касается «активного» кода.

    1) Убедитесь, что вы используете готовый документ (и/или страницу:Загрузка для turbolinks в зависимости от версии).

    2) Убедитесь, что ваши сценарии работают с самого начала.

    3) убедитесь, что они работают как для обновления страницы, так и для посещения turbolink.

    В зависимости от того, как и когда он ломается, это может означать различные проблемы.