J'essaie d'avoir class="text"
dans mes champs d'entrée lorsque j'utilise un wrapper personnalisé appelé: hinted in simple_form 2.0.0.rc
config.wrappers :hinted do |b|
b.use :input, :class => "text"
end
mais la sortie n'a pas cette classe, j'ai essayé
:wrap_with => {:class => 'text'}
en vain
Est-ce que quelqu'un sait comment cela est fait?
Je vous remercie!
Actuellement, il n'y a aucun moyen de le faire. Vous pouvez utiliser les options defaults
comme celle-ci si vous le souhaitez.
<%= simple_form_for(@user, :defaults => { :input_html => { :class => "text" } }) do %>
<%= f.input :name %>
<% end %>
Avec: input_html fonctionne. C'est un peu maladroit.
= f.input :email, :input_html => { :class => 'foo' }
Vous pouvez également définir toutes les entrées sur tous les éléments de formulaire:
simple_form_for(@user, :defaults => { :input_html => { :class => "foo" } })
Mais comme vous vous en doutez, cela s'applique à tout.
Vous pouvez créer des éléments de formulaire personnalisés:
# 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
Voir: https://github.com/plataformatec/simple_form/wiki/Adding-custom-input-components
Vous pouvez également créer un générateur de formulaire personnalisé:
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
Cette fonctionnalité est sur le point d'être fusionnée pour être maîtrisée maintenant (oct. 2012):
https://github.com/plataformatec/simple_form/pull/622
Vous pouvez ensuite faire quelque chose comme ceci pour ajouter des attributs HTML directement sur le champ de saisie:
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
J'ai eu un problème similaire, mais il semble que cette fonctionnalité (le input_class one) ait été fusionnée après la version 3.0.0.
J'ai donc essayé de créer un patch de singe pour supporter au moins le code config.input_class = 'foo'
Mon intention n'est pas de créer un excellent patch pour le singe (en fait, j'aime cet article here pour le faire - le patch pour le singe), eh bien, ce n'est qu'une idée, mais cela fonctionne. Maintenant, je travaille avec le SimpleForm v2.1.3 et Bootstrap 4 - version alpha (la dernière n'est pas importante ici mais c'est uniquement à titre d'information)
voici le code pour le patch singe:
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
maintenant, vous pouvez faire quelque chose comme ça:
SimpleForm.setup do |config|
# ...
config.input_class = 'foo'
#...
end