Как загрузить актив Javascript в зависимости от контроллера / действия? - PullRequest
6 голосов
/ 12 декабря 2011

Это значение по умолчанию application.js:

//= require jquery
//= require jquery_ujs
//= require_tree .

Шаблоны CoffeeScript содержат следующее:

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

Для меня «, относящийся к соответствующему контроллеру здесь », означает, что foo_bar.js.coffee следует загружать ТОЛЬКО при использовании контроллера foo_bar. Я прав?

Дело в том, что он загружает все файлы Javascript, даже если они не нужны. Также ... Я хотел бы знать, как условно включать файлы Javascript в зависимости от действия контроллера.

Ответы [ 2 ]

12 голосов
/ 12 декабря 2011

Пару способов сделать это, самый простой и элегантный способ, который я нашел, это:

Удалите директиву

//= require_tree .

и измените свой шаблон на

<%= javascript_include_tag "application", controller_name %>

Затем загрузите ваш глобальный js в приложении и контроллер, соответствующий имени контроллера.

Например, если вы находитесь в posts_controller, вы получите загруженные posts.js или posts.js.coffee.

РЕДАКТИРОВАТЬ

Чтобы выполнить действие, вы также можете добавить

action_name

к моему предлагаемому решению.Одна вещь, которую вы можете рассмотреть, это разбить ее на application_controller.rb:

before_filter :your_function

def your_function
  @controller = controller_name
  @action = action_name
end

Затем использовать это в макете

<%= javascript_include_tag "application", "#@controller.#@action" %>
3 голосов
/ 12 декабря 2011

Директива require_tree в вашем application.js загружает все файлы js и coffee, найденные в вашем дереве ресурсов. Если вы удалите его, он загрузит только указанные файлы.

Для меня «связанный с соответствующим контроллером здесь» означает, что файл foo_bar.js.coffee следует загружать ТОЛЬКО при использовании контроллера foo_bar. Я прав?

Нет, файлы загружаются, как указано в директивах require.

Также ... Я хотел бы знать, как условно включать файлы Javascript в зависимости от действия контроллера.

Создайте файл foo_bar.js для каждого контроллера, в каждом из них требуются другие файлы по мере необходимости и условно включите их в макет

# some_layout.erb
<%= javascript_include_tag params[:controller] %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...