2012-07-05 72 views
6

我想更改我在simple_form中提交按鈕的默認行爲,這樣我就不必爲所有表單明確指定:disable_with => true。我怎樣才能在simple_form.rb中做出這個特殊的改變?simple_form提交的缺省disable_with

回答

3

將此覆蓋添加到我的simple_form.rb中,就像魅力一樣工作!

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.button:submit%>'但不能,例如'<%= f.button:button%>'你能解釋一下代碼是做什麼的嗎?我可能會調整我自己的設置? – spume 2014-01-20 14:59:54

5

這在新版Rails中稍有不同,因爲設置屬性disable_with已被棄用。我寫這個文章:http://www.railsonmaui.com/blog/2014/02/23/simple-form-and-disable-processing-by-default/

這裏的新代碼:

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 

多虧@Appster的想法!

2

根據ActionView::Helpers::FormBuilder.submit,f.button取決於1〜2個參數,所以下面的代碼都應該工作。

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

在我的情況下,添加該代碼初始化文件的罰款。

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 

希望它有幫助。

0

它沒有覆蓋提交按鈕是使用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)