2012-07-05 21 views
6

Quiero cambiar el comportamiento predeterminado de mi botón de envío en simple_form, por lo que no necesito especificar explícitamente: disable_with => true para todos mis formularios. ¿Cómo puedo hacer este cambio particular en el archivo simple_form.rb?Default disable_with for simple_form submit

Respuesta

3

Agregar esta anulación a mi simple_form.rb funcionó como un amuleto!

SimpleForm::FormBuilder.class_eval do 
    def submit_with_override(field, options = {}) 
    submit_without_override(field, {:disable_with => 'saving...'}.merge(options)) 
    end 
    alias_method_chain :submit, :override 
end 
+0

Para mí, esto funciona con algunos botones y otros no. Específicamente, funciona con '<% = f.button: submit%>' pero no, por ejemplo, '<% = f.button: button%>' ¿Podría explicarme qué está haciendo este código para que pueda resolver cómo ¿Podría modificar mi propia configuración? – spume

5

Esto es un poco diferente en las versiones más nuevas de Rails, ya que el establecimiento de la propiedad disable_with está en desuso. Escribí un artículo sobre esto: http://www.railsonmaui.com/blog/2014/02/23/simple-form-and-disable-processing-by-default/

Aquí está el código nuevo:

SimpleForm::FormBuilder.class_eval do 
    def submit_with_override(field, options = {}) 
    data_disable_with = { disable_with: 'Processing...' } 
    options[:data] = data_disable_with.merge(options[:data] || {}) 
    submit_without_override(field, options) 
    end 
    alias_method_chain :submit, :override 
end 

Y gracias a @Appster a la idea!

2

De acuerdo con ActionView::Helpers::FormBuilder.submit, f.button accede a 1 ~ 2 parámetros, por lo que se deben trabajar los dos códigos siguientes.

  • f.submit "MyText", class: "my-btn"
  • f.submit class: "my-btn"

En mi caso, la adición de estos códigos para inicializar archivo funcionó bien.

SimpleForm::FormBuilder.class_eval do 
    def submit_with_override(value=nil, options={}) 
    value, options = nil, value if value.is_a?(Hash) 
    data_disable_with = { disable_with: 'Processing...' } 
    options[:data] = data_disable_with.merge(options[:data] || {}) 
    submit_without_override(value, options) 
    end 
    alias_method_chain :submit, :override 
end 

Espero que ayude.

0

no lo hizo anular cualquier Data- atributos existentes en el botón de envío que es compatible con los carriles 5.

module DisableDoubleClickOnSimpleForms 
    def submit(field, options = {}) 
    if field.is_a?(Hash) 
     field[:data] ||= {} 
     field[:data][:disable_with] ||= field[:value] || 'Processing...' 
    else 
     options[:data] ||= {} 
     options[:data][:disable_with] ||= options[:value] || 'Processing...' 
    end 
    super(field, options) 
    end 
end 

SimpleForm::FormBuilder.prepend(DisableDoubleClickOnSimpleForms)