2012-07-05 12 views
6

Ich möchte das Standardverhalten meiner Submit-Schaltfläche in simple_form ändern, so dass ich nicht explizit angeben muss: disable_with => true für alle meine Formulare. Wie kann ich diese spezielle Änderung in der simple_form.rb vornehmen?Default disable_with für simple_form submit

Antwort

3

Das Hinzufügen dieser Überschreibung zu meinem simple_form.rb funktionierte wie ein Zauber!

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

Für mich kompatibel ist, funktioniert dies mit einigen Tasten und andere nicht. Genauer gesagt funktioniert es mit '<% ​​= f.button: submit%>' aber nicht zum Beispiel mit '<% ​​= f.button: button%>' Könnten Sie erklären, was der Code tut, damit ich herausfinden kann, wie Ich könnte meine eigenen Einstellungen anpassen? – spume

5

Dies ist ein wenig anders in neueren Versionen von Rails, wie Einstellung der Eigenschaft disable_with veraltet ist. Ich schrieb einen Artikel zu diesem Thema: http://www.railsonmaui.com/blog/2014/02/23/simple-form-and-disable-processing-by-default/

Hier ist der neue Code:

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 

Und vielen Dank für die Idee @Appster!

2

Gemäß ActionView::Helpers::FormBuilder.submit, f.button accepts 1 ~ 2 Parameter, so sollten beide der folgenden Codes bearbeitet werden.

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

In meinem Fall diese Codes Hinzufügen Datei zu initialisieren hat gut funktioniert.

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 

Ich hoffe, es hilft.

0

Es ist nicht alle vorhandenen Daten- Attribute auf den Absenden-Button außer Kraft gesetzt hat, die mit Rails 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) 
Verwandte Themen