звездочки - несколько точек входа? - PullRequest
7 голосов
/ 14 июня 2011

Официальная документация звездочек ясно говорит, что:

Sprockets takes any number of source files and preprocesses them
line-by-line in order to build a `single` concatenation.

Я большой поклонник звездочек в Rails, но вот проблема - мое приложение должно поддерживать несколько макетов (браузеры для настольных компьютеров)) и мобильные клиенты (телефоны iphone, ipad, android и т. д.).

Для обеих этих макетов требуются собственные правила CSS для сброса HTML.Объединенные правила файлов сброса рабочего стола и мобильного устройства могут привести к конфликту, поскольку они переопределяют низкоуровневые директивы CSS.

Как это исправить?

Ответы [ 3 ]

7 голосов
/ 18 июня 2011

Вы можете получить несколько CSS-файлов верхнего уровня, создав файл Sprocket для каждого.Например, скажем, вы хотите, чтобы desktop.css состоял из reset.css, common.css, а ie.css и mobile.css состоял из common.css и ios.css.У вас будут следующие файлы:

  • app/assets/stylesheets/desktop.css
  • app/assets/stylesheets/mobile.css
  • app/assets/stylesheets/reset.css
  • app/assets/stylesheets/common.css
  • app/assets/stylesheets/ie.css
  • app/assets/stylesheets/ios.css

В desktop.css вы бы получили следующее:

/*
 *= require reset.css
 *= require common.css
 *= require ie.css
 */

В mobile.css вы быиметь следующее:

/*
 *= require common.css
 *= require ios.css
 */

Тогда в app/views/layouts/desktop.html.erb вы бы сделали

<%= stylesheet_link_tag :desktop, :debug => Rails.env.development? %>

и аналогично для mobile.html.erb.

Наконец, вы будетенеобходимо установить предварительно скомпилированный список активов в config/environments/production.rb:

config.assets.precompile = %w( desktop.css mobile.css )
2 голосов
/ 14 июня 2011

Я не совсем уверен, поддерживает ли это звездочки, но я знаю, что если вы используете камень Jammit .Вы можете установить различные пакеты, каждый со своим коктейлем из ваших файлов JS или CSS.Например, есть пакет: рабочая область для настольных компьютеров и и: мобильный пакет для мобильных телефонов.Все это определено в файле конфигурации yaml, и он объединит их в том порядке, в котором вы их перечислите, что может помочь исправить зависимости плагинов и т. Д.

javascripts:
  workspace:
    - public/javascripts/vendor/jquery.js
    - public/javascripts/lib/*.js
    - public/javascripts/views/**/*.js
    - app/views/workspace/*.jst

  mobile:
    - public/javascripts/vendor/jquery.js
    - public/javascripts/lib/mobile.js


stylesheets:
  common:
    - public/stylesheets/reset.css
    - public/stylesheets/widgets/*.css
  workspace:
    - public/stylesheets/pages/workspace.css
  mobile:
    - public/stylesheets/pages/mobile.css

Jammit может стоить посмотреть на ваши потребности*

Надеюсь, это поможет.

0 голосов
/ 14 июня 2011

Я предполагаю, что у вас уже есть разные макеты для каждого устройства или группы устройств. Если это так, просто включите в каждый файл разный файл верхнего уровня, а в этих файлах верхнего уровня используйте разные операторы require. Если вы используете Rails 3.1, нет причин для сохранения встроенной строки, включающей все файлы CSS.

...