Я ищу общий способ применения некоторых внешних CSS-фреймворков в приложении Rails.Эти структуры обычно определяют набор имен классов, которые должны использоваться для определенных элементов HTML.
Рассмотрим пользовательский интерфейс jQuery. Чтобы добиться единообразия стиля формы, вы должны сделать что-то вроде этого:
# in a view
<% form_for @foo do |f| %>
...
<%= f.text_field :bar, :class => ['ui-widget', 'ui-widget-content', 'ui-widget-container', 'ui-corner-all'] %>
or
<%= f.text_field :bar, :class => 'ui-widget ui-widget-content ui-widget-container ui-corner-all' %>
<% end %>
Выполнение этого для каждого поля ввода не является СУХИМ.
Даже вспомогательный метод, такой как
# in application_helper.rb
def jquery_ui_classes
'ui-widget ui-widget-content ui-widget-container ui-corner-all'
end
# in a view
<%= f.text_field :bar, :class => jquery_ui_classes %>
или
# in application_helper.rb
def jquery_text_field(form_builder, method, opts = {})
ui = ['ui-widget', 'ui-widget-content', 'ui-widget-container', 'ui-corner-all']
klass = [opts.delete(:class), ui].flatten.compact
form_builder.text_field method opts.merge(:class => klass)
end
# in a view
<%= jquery_text_field f, :bar %>
, выглядит неправильно (или подробнее DRY), поскольку вам все равно придется прикоснуться к сгенерированному представлению формы ...
Альтернативными способами теперь могут быть исправление класса InstanceTag
или взлом хелпера form_for
.
Кто-нибудь делал это раньше?
Кстати: я бы избегал использования jQuery (или Javascript в целом) для применения атрибутов класса, так как JS может быть отключен, заблокирован или даже доставлен с задержкой и может вызвать мерцание ...
Ура,
Доминик