Образы Ruby on Rails 3.1 и jQuery UI - PullRequest
55 голосов
/ 18 мая 2011

Я использую Ruby on Rails (Edge, версия для разработчиков), а Ruby rvm 1.9.2.

application.js выглядит следующим образом.

//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_tree 

Где находитсяправильное место в Ruby on Rails 3.1 для размещения темы jQuery UI ?

Согласно Поля автозаполнения в Ruby on Rails 3.1 с jQuery UI Я должен поместить тему jQuery UI в папку vendor / assets / stylesheets.Это звучит как умное место, чтобы иметь его, но я не могу заставить его работать: - (.

Мне удалось загрузить CSS, поместив его в папку assets / stylesheets, но изображения, которые яне удалось загрузить.

Конечно, я мог бы использовать старый способ, просто поместив тему в папку public / stylesheets / и используя:

<%= stylesheet_link_tag "jquery/ui-lightness/jquery-ui-1.8.11.custom" %>

в приложении.html.erb, но, пытаясь быть современным человеком, я бы предпочел использовать новый способ выполнения тингов: -).

Ответы [ 18 ]

26 голосов
/ 13 сентября 2011

Теперь, когда у нас есть Ruby on Rails 3.1.0, вот что у меня сработало:

app/assets/javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .

Это включает в себя пользовательский интерфейс jQuery, предоставляемый гемом jquery-rails. Но драгоценный камень не предоставляет файлы темы. Для этого я добавил каталог theme в vendor/assets/stylesheets, содержащий:

  • файл jquery.ui.theme.css,
  • каталог images темы пользовательского интерфейса jQuery.

Обязательно сохраните каталог темы images с файлом CSS! Не помещайте файлы изображений в vendor/assets/images, иначе они не будут найдены jQuery (который ищет их в /assets/images).

Наконец, изменил файл app/assets/stylesheets/application.css на:

/*
*= require_tree ../../../vendor/assets/stylesheets
*= require_tree .
*/
19 голосов
/ 07 июня 2011

Пример рабочей настройки:

    $ cat app/assets/javascripts/application.js

    //= require jquery
    //= require jquery-ui


    $ cat app/assets/stylesheets/application.css

    /*
     *= require vendor
     *
     */


    $ cat vendor/assets/stylesheets/vendor.css

    /*
     *= require_tree ./jquery_ui 
     *
     */

    vendor/assets/ $ tree
     stylesheets
         vendor.css
             jquery_ui
                      jquery-ui-1.8.13.custom.css
                      ...
     images
        jquery_ui
            ui-bg_flat_0_aaaaaa_40x100.png
            ...

Наконец, выполните эту команду:

    vendor/assets/images $ ln -s jquery_ui/ images

Наслаждайтесь своим пользовательским интерфейсом jQuery

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

Я решил сделать это по-старому:

Я поместил папку jQuery, содержащую тему (без изменений как в CSS, так и в папку с изображениями), в папку assets / stylesheets и вставил:<%= stylesheet_link_tag "jquery/ui-lightness/jquery-ui-1.8.13.custom" %> в app/views/layouts/application.html.erb файле.Это решение с меньшим количеством орехов, когда я буду обновлять jQuery позже.

(Спасибо за все предложения по решению. Пришло время сделать вывод.)

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

Мне нравится выборочно загружать код JavaScript jQuery UI, чтобы я мог легко перейти на любые будущие версии и иметь легкий пользовательский интерфейс jQuery (сюда включены только необходимые файлы, здесь progressbar.js ).

У меня есть следующая настройка для темы JQuery UI «Dot Luv».

Примечание:

Файлы JavaScript и CSS распакованы и взяты из jquery-ui-1.8.16.custom/development-bundle/ui и jquery-ui-1.8.16.custom/development-bundle/themes/dot-luv соответственно, и я использую звездочки для их минимизации и сжатия.

Изображения из jquery-ui-1.8.16.custom/development-bundle/themes/dot-luv/images.

Структура каталогов:

Directory Structure

приложение / активы / JavaScripts / application.js

//= require jquery
//= require jquery-ui/v1.8.16/Core/jquery.ui.core
//= require jquery-ui/v1.8.16/Core/jquery.ui.widget
//= require jquery-ui/v1.8.16/Widgets/jquery.ui.progressbar
//= require jquery_ujs

приложение / активы / таблицы стилей / application.css.scss

*= require_self
*= require jquery-ui/v1.8.16/dot-luv/jquery.ui.all
*= require jquery-ui/v1.8.16/dot-luv/jquery.ui.base
*= require jquery-ui/v1.8.16/dot-luv/jquery.ui.core
*= require jquery-ui/v1.8.16/dot-luv/jquery.ui.progressbar
*= require jquery-ui/v1.8.16/dot-luv/jquery.ui.theme

конфиг / application.rb

config.assets.paths << File.join(Rails.root,'vendor/assets/images/jquery-ui/v1.8.16/dot-luv/')
5 голосов
/ 06 января 2012

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

Существует гем под названием jquery-ui-themes , который включает темы jQuery UI по умолчанию , уже преобразованные в sass с помощью image-path помощника . Таким образом, вы можете включить гем и получить любую из стандартных тем из коробки, просто добавив их в application.css файл

Если вы хотите использовать свою собственную пользовательскую тему (как я это сделал), существует задача rake, которая автоматически преобразует файл CSS в SCSS и использует помощник image-path, чтобы найти правильный путь.

5 голосов
/ 20 ноября 2011

С Ruby on Rails 3.1.2 я сделал следующее.

#app/assets/javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .

Для файлов CSS я предпочитаю делать @import, чтобы иметь больший контроль над порядком загрузки файлов CSS. Для этого мне нужно добавить расширение .scss к файлу app/assets/stylesheets/application.css, а также ко всем CSS-файлам, которые я хочу импортировать, например, к CSS-файлу jQuery UI.

#app/assets/stylesheets/application.css.scss

/*
* This is a manifest file that'll automatically include all the stylesheets available in this directory
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
* the top of the compiled file, but it's generally better to create a new file per style scope.
*= require_self
*/

@import "jquery-ui/ui-lightness/jquery-ui-1.8.16.custom.css.scss";

/* Other css files you want to import */
@import "layout.css.scss";
@import "home.css.scss";
@import "products.css.scss";
....

Затем я поместил все jQuery UI, относящиеся к вендору / активам, следующим образом:

Таблица стилей пользовательского интерфейса jQuery:

vendor/assets/stylesheets/jquery-ui/ui-lightness/jquery-ui-1.8.16.custom.css.scss

Папка изображений jQuery UI:

vendor/assets/images/images

Обратите внимание, что вы можете создать дополнительную папку в пути к таблицам стилей, как я делал здесь с путем "jquery-ui / ui-lightness". Таким образом, вы можете хранить несколько разделов jQuery в отдельных папках.

** Перезагрузите сервер, чтобы загрузить все вновь созданные пути загрузки **

У Райана Бейтса есть несколько отличных скринкастов о конвейере ресурсов и Sass в Ruby on Rails 3.1, где он показывает, как использовать функцию @import в Sass. Смотрите здесь:

Редактировать: Я забыл упомянуть, что это работает как локально, так и на Heroku в стеке Cedar .

5 голосов
/ 22 февраля 2012

Теперь есть jquery-ui-rails гем (см. объявление ).Он упаковывает изображения как ресурсы (и правильно ссылается на них из файлов CSS), поэтому все работает.: -)

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

Итак, вот один способ сделать это, в котором отсутствуют недостатки некоторых других, упомянутых здесь, - не требуется, чтобы вы разбирали тему и помещали ее части в разные места, он не требует символических ссылок, и все же позволяет вам скомпилировать css темы в один основной css как часть конвейера ресурсов. Это не требует патча обезьяны как предложение Мостов Нэша.

Однако для этого требуется дополнительный вид хакерской строки конфигурации. (Однострочник, хотя, в основном).

Хорошо, поместите вашу тему в vendor / assets / jquery / ui-lightness /, как вы и хотели. (так же будет работать в lib / assets или app / assets).

И

/* =require ui-lightness */

в вашем приложении. Все идет нормально. Теперь, чтобы изображения отображались правильно, просто добавьте это в config / application.rb:

initializer :add_jquery_ui_asset_base, :group => :all, :after => :append_assets_path do
   config.assets.paths.unshift Rails.root.join("vendor", "assets", "stylesheets", "jquery-ui", "ui-lightness").to_s
end

Для меня это теперь работает в dev, production и других нестандартных конфигурациях ресурсов, о которых я мог подумать (например, dev с debug = false, который отключает некоторые другие попытки решения).

Больше информации на http://bibwild.wordpress.com/2011/12/08/jquery-ui-css-and-images-and-rails-asset-pipeline/

2 голосов
/ 18 октября 2011

Опираясь на ряд других предложений, я нашел решение, которое работает в моей среде разработки и на производстве на Heroku.

app / assets / javascripts / application.js

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .

app / assets / stylesheets / application.css

/*
 *= require_self
 *= require vendor
 *= require_tree .
*/

vendor / assets / stylesheets / vendor.css

 /*
 *= require_self
 *= require_tree .
*/

Я добавил jquery-ui-1.8.16.custom.css и связанную папку images в vendor / assets / stylesheets (Iобнаружил, что если папка images не находилась в той же папке, что и vendor.css , она не работала).

Никаких других изменений не требовалось для работы впроизводственная среда Heroku.

Спасибо @denysonique, @softRli и @Paul Cook за их предыдущие ответы, которые мне помогли.

1 голос
/ 14 ноября 2011

Чтобы заставить это работать как в моей локальной среде разработчика, так и в Heroku, я сделал почти то же самое, что denysonique предложил , но с парой отличий в конце:

Во-первых, моя структура каталогов выглядела так:

vendor/assets/images/
                  jquery_ui/
                      images/
                          ui-bg_flat_0_aaaaaa_40x100.png
                          ...

И второе, моя символическая ссылка была:

vendor/assets/images $ ln -s jquery_ui/images images

Это то, что, наконец, сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...