2013-03-14 10 views
12

Próbuję wprowadzić niestandardowe dane wejściowe dla waluty w mojej aplikacji. Miałem te bootstrap owijarki i etc (myślę, że chodzi o simple_form lub bootstrap gem ...), tak, mogę zrobić coś takiego:Proste wejście niestandardowe z niestandardowym opakowaniem

<%= f.input :cost, wrapper => :append do %> 
     <%= content_tag :span, "$", class: "add-on" %> 
     <%= f.number_field :cost %> 
<% end %> 

I to działa tak jak oczekiwano. Chodzi o to, że potrzebuję tego samego w wielu miejscach i nie chcę go kopiować/wklejać.

Postanowiłem więc utworzyć niestandardowe wejście.

Do tej pory mam następujący kod:

class CurrencyInput < SimpleForm::Inputs::Base 

    def input 
    input_html_classes.unshift("string currency") 
    input_html_options[:type] ||= input_type if html5? 

    @builder.input attribute_name, :wrapper => :append do |b| 
     # content_tag(:span, "$", class: "add-on") 
     b.text_field(attribute_name, input_html_options) 
    end 
    end 
end 

Ale mam pewne błędy. Wygląda na to, że b nie jest zgodny z oczekiwaniami, więc po prostu nie działa.

Czy to naprawdę możliwe? Nie mogłem znaleźć żadnego przykładu i nie mogę sprawić, by działał sam.

Z góry dziękuję.

+1

myślę, że to powinno działać: https://gist.github.com/rafaelfranca/5158873 – rafaelfranca

+0

to działa! Ale naprawdę chcę zrobić to opakowanie w moim niestandardowym wprowadzeniu, więc nie muszę przekazywać opcji opakowania, gdy używam wejścia waluty. Czy to możliwe? Wielkie dzięki. – caarlos0

+0

Możesz użyć opcji wrapper_mappings. Zobacz https://github.com/plataformatec/simple_form/blob/master/lib/generators/simple_form/templates/config/initializers/simple_form.rb#L123 – rafaelfranca

Odpowiedz

16

tego bloku zmienna nie istnieje, swoją metodę wprowadzania muszą być tak:

class CurrencyInput < SimpleForm::Inputs::Base 

    def input 
    input_html_classes.unshift("string currency") 
    input_html_options[:type] ||= input_type if html5? 

    template.content_tag(:span, "$", class: "add-on") + 
     @builder.text_field(attribute_name, input_html_options) 
    end 
end 

Teraz można zarejestrować domyślną opakowanie do tego niestandardowego wejścia w was prosty formularz inicjator:

config.wrapper_mappings = { :currency => :append } 

można używać tak:

<%= f.input :cost, :as => :currency %> 
+0

TO TO JEST! Dziękuję bardzo Rafael, nie wiedziałem o konfiguracji opakowania według typu pola. Twoje zdrowie! – caarlos0

Powiązane problemy