chernish2
@chernish2
Ruby-программист

Rails 4 asset pipeline — как настроить области видимости?

У меня в проекте на Rails 4 есть два контроллера, назовем их для краткости c1 и c2.
В папке "assets/javascripts" лежат, соответственно, c1.js и c2.js, содержащие некоторые функции. У части функций идентичные имена, но разное поведение, например функция getXPath() есть и в c1.js, и в c2.js. Это приводит к проблемам, поскольку из c1 view может быть вызвана функция из c2.js.
Можно конечно именовать функции с именами контроллеров, например getXPathC1() / getXPathC2(), но я бы предпочел настроить области видимости так, чтобы в представлении c1 была доступна лишь c1.js, а в представлении c2 - лишь c2.js.
Как это можно сделать? Возможно ли вообще такое?
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 3
@vsuhachev
Ответ написан
Комментировать
@malroc
Если вам в гарантированно в контроллере c1 не понадобится джаваскрипт из c2 и наоборот, создайте два разных скомпилированных джаваскрипт-файла вместо одного (application.js), либо просто исключите c1.js и c2.js из application.js и подключайте их потом отдельно (второй способ менее трудозатратен, но увеличивается количество get-реквестов, т.к. получится по 2 подключаемых js-файла на контроллер - application.js и c1/2.js).
В обоих случаях для продуктового окружения нужно будет изменить настройки компиляции ассетов (т.к. по умолчанию в публичном доступе остаётся только application.js).
Ответ написан
Комментировать
@jarosluv
3 способа решить вашу задачу:
theflyingdeveloper.com/controller-specific-assets-...
https://stackoverflow.com/questions/6571753/rails-...
https://railsapps.github.io/rails-javascript-inclu...

Хотя в сущности все они сводятся к одному, с той лишь разницей, как вы будете определять нужный js-файл для подключения - автоматически по названию контроллера, указывая название нужного файла во вьюхах или же определением нужных для страницы функций в самом js-коде.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы