2012-04-22 3 views
2

У меня есть отдельный файл scss для каждого контроллера, и я не импортирую их все в файл application.css, чтобы я мог включать в таблицу тип таблицы стилей и js-файл контроллера.Предварительные компиляции активов контроллера в рельсах 3.2

Так в макете я:

<%= stylesheet_link_tag "application" %> 
<%= stylesheet_link_tag params[:controller], :media => "all" %> 
<%= javascript_include_tag 'application' %> 
<%= javascript_include_tag params[:controller] %> 

Но когда я запускаю грабли активы: PreCompile Я не компилируются активов для контроллеров.

Я искал решения в Интернете, но все они заявили о необходимости добавления необходимых файлов в файл config.assets.precompile staitment. И я не знаю, что добавить туда, чтобы все активы в подпапках app/assets/stylesheets и подпапки app/assets/javascripts автоматически компилировались.

UPDATE 1

ОК, я буду компилировать все их в одном файле, но есть две проблемы:

  1. У меня есть файл _base.scss, содержащий все необходимые переменные и импорта и имеют переименовывает application.css к application.css.scss, так что я могу импортировать этот файл, прежде чем все остальное:

    @import 'base'; 
    @import 'style'; 
    @import 'forms'; 
    

Как это сделать с манифестом? Не удалось найти способ импортировать весь каталог с помощью scss.

  1. У меня есть разные действия для тех же селекторов в разных контроллерах. Какой самый простой способ разделить эти действия и определить, что ведьма должна обрабатываться на определенной странице?

ответ

0

Это плохая идея, потому что она добавляет дополнительные HTTP-запросы для каждой загрузки страницы, требует большого количества дополнительных файлов (большая часть которых будет пуста, редко будет конкретный CSS/JS для конкретного контроллера) и игнорирует кеширование браузера (кешируйте application.css/js один раз и забудьте об этом).

Лучше написать свой CSS/JS таким образом, чтобы вы могли включить его все вместе и правильно использовать конвейер ресурсов.

+0

Обновлен вопрос с проблемами на этом. – Almaron

+0

Я предпочитаю иметь приложение CSS и JS, а затем для каждого контроллера CSS и JS. Поскольку контроллеры разбивают мое приложение на определенные части. Мне не нравится сбросить все мои JS & CSS в 1 файл. Это можно сделать, но почему у всех неиспользуемых селекторов и пустых селекторов jquery. – Amala

2

Решение:

в файл конфигурации/application.rb

добавить эту строку:

config.assets.precompile += ["controller1.js", "controller1.css", "controller2.js", "controller3.js"] 

и в следующий раз, когда вы запускаете активы: прекомпиляции будет компилировать эти файлы также

+0

Я ищу способ сделать это автоматически, но не могу найти чистый. – Amala

0

что-то типа:

config.assets.precompile += Dir::entries("app/assets/javascripts"). 
           map{|f| f[/^(?!application\.).*\.js/]}.compact 
Смежные вопросы