2012-02-21 11 views
14

che sto cercando di avere class="text" nei miei campi di input quando si utilizza un wrapper personalizzato chiamato: accennato in simple_form 2.0.0.rccome aggiungere una classe al componente di ingresso in un involucro in simple_form 2

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

ma l'uscita non ha quella classe, ho provato

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

inutilmente

qualcuno sa come si fa?

Grazie!

+0

quindi vuoi avere "testo" di classe sui tuoi input o sul wrapper? –

+0

input, voglio e non voglio che questo venga eseguito in linea come in <% = f.input: due_attacchi, input_html: {classe: 'testo'}%> –

risposta

17

Attualmente non c'è modo di farlo. Puoi usare le opzioni defaults come questo se vuoi.

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

che lo farà in realtà, poiché quei campi di testo di cui ho bisogno per avere "testo" di classe sono in un campo semplice per un'associazione. Grazie Rafael –

+2

@rafaelfranca forse dovremmo implementarlo? Posso aiutarti se sembra una buona idea –

+0

@nash sicuro. Se vuoi, puoi provare a rendere questa una configurazione wrapper valida – rafaelfranca

12

Questa funzione è in procinto di essere uniti a padroneggiare questo momento (ottobre 2012):

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

allora si può fare qualcosa di simile per aggiungere attributi HTML direttamente sul campo di immissione:

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

Bello. Questo mi aiuta qui ?: http://stackoverflow.com/questions/13039336/grouping-checkboxes-for-individual-boolean-values-using-css-twitter-bootstrap –

+0

Un anno dopo. Nessuna fusione! – Rimian

+0

@rafaelfranca Sì, stavo cercando anche questo, oggi. – jrhorn424

26

Con: input_html funziona. È un po 'goffo.

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

È anche possibile impostare tutti gli ingressi su tutti gli elementi del modulo:

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

Ma come ci si aspetta, questo vale per tutto.

È possibile creare elementi del modulo personalizzati:

# 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 

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

È anche possibile creare un generatore di modulo personalizzato:

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

In CustomFormBuilder, dovresti avere le opzioni [: input_html] || = {} prima di fondervi. – psparrow

-2

È possibile impostare questo nel simple_form initializer:

config.input_class = 'foo'

funziona per me :)

0

Ho avuto un problema simile, ma sembra che questa caratteristica (la input_class uno) è stato fuso dopo la versione 3.0.0.

Così ho provato a fare una patch scimmia per supportare almeno il codice config.input_class = 'foo'

La mia intenzione non è quella di fare un grande patch di scimmia (in realtà mi piace questo articolo here per farlo - la patch scimmia), beh, è ​​solo un'idea ma funziona, ora sto lavorando con SimpleForm v2.1.3 e Bootstrap 4 - versione alpha (l'ultimo non è importante, ma è solo per uno scopo informazioni)

qui è il codice per la patch scimmia:

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 

ora si può fare qualcosa di simile this:

SimpleForm.setup do |config| 
    # ... 
    config.input_class = 'foo' 
    #... 
end 
Problemi correlati