2012-02-21 12 views
14

मैं जब नामक कस्टम आवरण का उपयोग कर मेरी इनपुट फ़ील्ड में class="text" के लिए कोशिश कर रहा हूँ: simple_form 2.0.0.rc में संकेत दियाsimple_form में एक आवरण में इनपुट घटक के एक वर्ग को जोड़ने का तरीका 2

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

लेकिन उत्पादन उस वर्ग नहीं है, मैं

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

की कोशिश की कोई फ़ायदा नहीं हुआ

किसी को भी पता है कि यह कैसे किया जाता है?

धन्यवाद!

+0

तो क्या आप अपने इनपुट या रैपर पर कक्षा "टेक्स्ट" रखना चाहते हैं? –

+0

इनपुट, मुझे <इनपुट क्लास = 'टेक्स्ट' चाहिए> और मैं नहीं चाहता कि यह इनलाइन को <% = f.input में करें: due_at, input_html: {class: 'text'}%> –

उत्तर

17

वर्तमान में ऐसा करने का कोई तरीका नहीं है। यदि आप चाहें तो defaults विकल्पों का उपयोग इस तरह कर सकते हैं।

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

जो यह करेगा , असल में, उन टेक्स्ट फ़ील्ड्स के रूप में जिनके लिए मुझे कक्षा "टेक्स्ट" होना चाहिए, एक एसोसिएशन के लिए एक simple_fields_for में है। धन्यवाद राफेल –

+2

@rafaelfranca शायद हमें इसे लागू करना चाहिए? अगर यह एक अच्छा विचार –

+0

@nash सुनिश्चित करने की तरह लगता है तो मैं मदद कर सकता हूं। यदि आप चाहते हैं, तो आप इसे एक वैध रैपर कॉन्फ़िगरेशन बनाने की कोशिश कर सकते हैं – rafaelfranca

12

इस सुविधा के बारे में अभी महारत हासिल करने के मर्ज करने (अक्टूबर 2012) है:

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

तो फिर तुम इस HTML जोड़ने के लिए की तरह कुछ कर सकते हैं इनपुट क्षेत्र पर सीधे जिम्मेदार बताते हैं:

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

अच्छा। क्या यह मेरी मदद करता है ?: http://stackoverflow.com/questions/13039336/grouping-checkboxes-for-individual-boolean-values-using-css-twitter-bootstrap –

+0

एक साल बाद। कोई विलय नहीं! – Rimian

+0

@rafaelfranca हाँ, मैं आज भी इसकी तलाश कर रहा था। – jrhorn424

26

के साथ: input_html काम करता है। यह थोड़ा सा गुंजाइश है।

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

तुम भी सभी प्रपत्र तत्वों पर सभी आदानों सेट कर सकते हैं:

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

लेकिन आपकी अपेक्षानुसार, यह सब कुछ करने के लिए लागू होता है।

आप कस्टम प्रपत्र तत्वों बना सकते हैं:

# 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 

देखें:

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

कस्टमफॉर्मबिल्डर में, आपके पास विलय करने से पहले विकल्प [: input_html] || = {} होना चाहिए। – psparrow

0

मैं एक ऐसी ही समस्या थी, लेकिन ऐसा लगता है कि इस सुविधा (input_class एक) 3.0.0 संस्करण के बाद विलय हो गया।

तो मैं कम से कम समर्थन config.input_class = 'foo' कोड

मेरे इरादा एक महान बंदर पैच करने के लिए नहीं है के लिए एक बंदर पैच करने की कोशिश की (वास्तव में मुझे लगता है कि ऐसा करने के लिए इस लेख here पसंद है - बंदर पैच), अच्छा यह केवल एक विचार है लेकिन यह काम करता है, अब मैं सरलफॉर्म v2.1 के साथ काम कर रहा हूं।3 और बूटस्ट्रैप 4 - अल्फा संस्करण (पिछले एक नहीं यहां महत्वपूर्ण है, लेकिन यह सिर्फ एक सूचना उद्देश्य के लिए है)

यहाँ

बंदर पैच के लिए कोड है:

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 

अब आप की तरह कुछ कर सकते हैं यह:

SimpleForm.setup do |config| 
    # ... 
    config.input_class = 'foo' 
    #... 
end 
संबंधित मुद्दे