すべてのフォームに対して :disable_with => true を明示的に指定する必要がないように、simple_form の送信ボタンのデフォルトの動作を変更したいと考えています。simple_form.rb でこの特定の変更を行うにはどうすればよいですか?
3597 次
4 に答える
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 に感謝します!
于 2014-02-24T08:58:45.883 に答える
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
于 2012-07-23T10:31:45.100 に答える
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
それが役に立てば幸い。
于 2014-09-03T10:43:36.990 に答える
1
Rails 5 と互換性のある送信ボタンの既存の data- 属性をオーバーライドしませんでした。
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)
于 2016-04-25T06:27:17.770 に答える