6

すべてのフォームに対して :disable_with => true を明示的に指定する必要がないように、simple_form の送信ボタンのデフォルトの動作を変更したいと考えています。simple_form.rb でこの特定の変更を行うにはどうすればよいですか?

4

4 に答える 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.button1~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 に答える