wake-up-neo.com

so fügen Sie der Eingabekomponente in einem Wrapper in simple_form 2 eine Klasse hinzu

Ich versuche, class="text" in meinen Eingabefeldern zu haben, wenn Sie einen benutzerdefinierten Wrapper mit dem Namen: in simple_form 2.0.0.rc angesprochen haben

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

aber die Ausgabe hat diese Klasse nicht, ich habe es versucht 

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

umsonst

Weiß jemand, wie das gemacht wird?

Danke dir!

14
Nik So

Derzeit gibt es keine Möglichkeit, dies zu tun. Sie können die Optionen für defaults verwenden, wenn Sie möchten.

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

Mit: input_html funktioniert. Es ist etwas klobig. 

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

Sie können auch alle Eingaben für alle Formularelemente festlegen:

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

Aber wie Sie es erwarten würden, trifft dies auf alles zu.

Sie können benutzerdefinierte Formularelemente erstellen:

# 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

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

Sie können auch einen benutzerdefinierten Formularersteller erstellen:

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
33
Rimian

Diese Funktion wird gerade mit dem Master (Oktober 2012) zusammengeführt:

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

Dann können Sie auf diese Weise HTML-Attribute direkt im Eingabefeld hinzufügen:

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
12
crispy

Ich hatte ein ähnliches Problem, es scheint jedoch, dass diese Funktion (die input_class one) nach der Version 3.0.0 zusammengeführt wurde.

Also habe ich versucht, einen Affen-Patch für die Unterstützung des config.input_class = 'foo'-Codes zu erstellen

Ich beabsichtige nicht, einen großartigen Affen-Patch zu erstellen (in der Tat mag ich diesen Artikel hier dafür - den Affen-Patch). Nun, es ist nur eine Idee, aber es funktioniert, jetzt arbeite ich mit SimpleForm v2 .1.3 und Bootstrap 4 - Alpha-Version (die letzte ist hier nicht wichtig, dient aber nur zu Informationszwecken)

hier ist der Code für den Affen-Patch:

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

jetzt kannst du so etwas machen:

SimpleForm.setup do |config|
  # ...
  config.input_class = 'foo'
  #...
end
0
Johan Tique