2012-02-21 14 views
14

Estoy tratando de tener class="text" en mis campos de entrada cuando se utiliza una envoltura personalizada llamada: insinuado en 2.0.0.rc simple_formcómo agregar una clase al componente de entrada en una envoltura en simple_form 2

config.wrappers :hinted do |b| 
    b.use :input, :class => "text" 
end 

pero la salida no tiene esa clase, he intentado

:wrap_with => {:class => 'text'} 

en vano

¿alguien sabe cómo se hace esto?

¡Gracias!

+0

¿quieres tener clase de "texto" en tus entradas o en el contenedor? –

+0

entrada, quiero y no quiero hacer esto en línea como en <% = f.input: due_at, input_html: {class: 'text'}%> –

Respuesta

17

Actualmente no hay forma de hacerlo. Puede usar las opciones defaults como esta si lo desea.

<%= simple_form_for(@user, :defaults => { :input_html => { :class => "text" } }) do %> 
    <%= f.input :name %> 
<% end %> 
+0

que lo hará , de hecho, ya que esos campos de texto para los que necesito tener el "texto" de clase están en simple_fields_for para una asociación. Gracias Rafael –

+2

@rafaelfranca tal vez deberíamos implementarlo? Puedo ayudar si suena como una buena idea –

+0

@nash sure. Si lo desea, puede tratar de hacer de esto una configuración de envoltura válida – rafaelfranca

12

Esta característica está a punto de ser fusionado a dominar en este momento (octubre de 2012):

https://github.com/plataformatec/simple_form/pull/622

entonces usted puede hacer algo como esto para agregar atributos HTML directamente en el campo de entrada:

SimpleForm.build :tag => :div, :class => "custom_wrapper" do |b| 
    b.wrapper :tag => :div, :class => 'elem' do |component| 
    component.use :input, :class => ['input_class_yo', 'other_class_yo'] 
    component.use :label, :"data-yo" => 'yo' 
    component.use :label_input, :class => 'both_yo' 
    component.use :custom_component, :class => 'custom_yo' 
    end 
end 
+0

Agradable. ¿Eso me ayuda aquí ?: http://stackoverflow.com/questions/13039336/grouping-checkboxes-for-individual-boolean-values-using-css-twitter-bootstrap –

+0

Un año después. Sin fusión! – Rimian

+0

@rafaelfranca Sí, estaba buscando esto también, hoy. – jrhorn424

26

Con: input_html funciona. Es un poco torpe.

= f.input :email, :input_html => { :class => 'foo' } 

También puede configurar todas las entradas en todos los elementos del formulario:

simple_form_for(@user, :defaults => { :input_html => { :class => "foo" } }) 

Pero como era de esperar, esto se aplica a todo.

Puede crear elementos de formulario personalizados:

# app/inputs/foo_input.rb 
class FooInput < SimpleForm::Inputs::StringInput 
    def input_html_classes 
    super.push('foo') 
    end 
end 

// in your view: 
= f.input :email, :as => :foo 

Ver: https://github.com/plataformatec/simple_form/wiki/Adding-custom-input-components

También puede crear un formulario personalizado constructor:

def custom_form_for(object, *args, &block) 
    options = args.extract_options! 
    simple_form_for(object, *(args << options.merge(builder: CustomFormBuilder)), &block) 
end 

class CustomFormBuilder < SimpleForm::FormBuilder 
    def input(attribute_name, options = {}, &block) 
    options[:input_html].merge! class: 'foo' 
    super 
    end 
end 
+0

En CustomFormBuilder, debe tener las opciones [: input_html] || = {} antes de fusionarse. – psparrow

-2

Puede configurar esto en inicializador simple_form:

config.input_class = 'foo'

que funciona para mí :)

0

que tenía un problema similar, sin embargo, parece que esta función (el input_class uno) se fusionó después de la versión 3.0.0.

así que traté de hacer un parche mono para soportar al menos el código config.input_class = 'foo'

Mi intención no es hacer un gran parche de mono (de hecho me gusta este artículo here por hacer eso - el parche mono), bueno, es solo una idea pero funciona, ahora estoy trabajando con SimpleForm v2.1.3 y Bootstrap 4 - versión alfa (el último no es importante aquí, pero es sólo para un propósito información)

Este es el código para el parche mono:

module SimpleForm 
    mattr_accessor :input_class 
    @@input_class = nil 
end 
module SimpleForm 
    module Inputs 
    class Base 
     def html_options_for(namespace, css_classes) 
     html_options = options[:"#{namespace}_html"] 
     html_options = html_options ? html_options.dup : {} 
     css_classes << html_options[:class] if html_options.key?(:class) 
     css_classes << SimpleForm.input_class if namespace == :input && SimpleForm.input_class.present? 
     html_options[:class] = css_classes unless css_classes.empty? 
     html_options 
     end 
    end 
    end 
end 

ahora se puede hacer algo como esto:

SimpleForm.setup do |config| 
    # ... 
    config.input_class = 'foo' 
    #... 
end 
Cuestiones relacionadas