首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Rails: simple_form中提交按钮的自定义包装器?

Rails: simple_form中提交按钮的自定义包装器?
EN

Stack Overflow用户
提问于 2014-12-18 05:50:52
回答 3查看 2.9K关注 0票数 17

我正在使用simple_form gem与bootstrap 3。我想有一个提交按钮的包装器

现在它将HTML显示为

代码语言:javascript
复制
<form id="new_order" ...>
    ...

   <input class="btn btn-primary" type="submit" value="Save" name="commit">
</form>

我想写一个包装器,这样HTML就会是:

代码语言:javascript
复制
<form id="new_order" ...>
  ...

  <div class="form-group">
     <div class="col-sm-offset-2 col-sm-10">
        <input class="btn btn-primary" type="submit" value="Save" name="commit">
     </div>
 </div>

到目前为止,我得到的结论是:

app/initializers/simple_form_bootstrap.rb:

代码语言:javascript
复制
options[:wrapper] = :horizontal_form
options[:wrapper_mappings] = {
  check_boxes: :horizontal_radio_and_checkboxes,
  radio_buttons: :horizontal_radio_and_checkboxes,
  file: :horizontal_file_input,
  boolean: :horizontal_boolean,

 # what to write here??
 # submit: :horizontal_submit_button

}

这是我的包装器:

代码语言:javascript
复制
  config.wrappers :horizontal_submit_button, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
     b.use :html5
     b.use :placeholder

     b.wrapper tag: 'div', class: 'col-sm-offset-2 col-sm-10' do |ba|
       ba.use :input
       # some coe goes here, maybe
     end
  end

在提交按钮的wrapper_mappings中使用哪种输入类型?如何编写包装器?

EN

回答 3

Stack Overflow用户

发布于 2015-04-10 15:00:00

我今天也想做同样的事情。奇怪的是,我找不到通过wrapper API实现这一点的方法,但默认情况下,Simple Form喜欢将其输入包装在div.form-inputs中,并将其提交按钮包装在div.form-actions中。因此,我将div.form-actions样式化为@extend .col-md-offset-4,以获得我想要的结果。

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2017-10-14 13:22:17

Simple form button是rails submit助手的基本包装器。它所做的就是添加在简单表单初始化器中定义的button_class,并将其发送到submit,下面是它现在的样子:

https://github.com/plataformatec/simple_form/blob/master/lib/simple_form/form_builder.rb#L211

代码语言:javascript
复制
def button(type, *args, &block)
  options = args.extract_options!.dup
  options[:class] = [SimpleForm.button_class, options[:class]].compact
  args << options
  if respond_to?(:"#{type}_button")
    send(:"#{type}_button", *args, &block)
  else
    send(type, *args, &block)
  end
end

这里没有使用包装器api的逻辑。但是该if语句允许您定义自己的按钮方法。如果您在表单中使用f.button :submit,请将其放入初始化器(或装饰器,以便在自定义时不必重新启动服务器):

代码语言:javascript
复制
module SimpleForm
  class FormBuilder
    def submit_button(*args, &block)
      ActionController::Base.helpers.content_tag(:div, class: 'form-actions') do
        submit(*args, &block)
      end
    end
  end
end

你不必使用content_tag帮助器,任何html_safe字符串都可以工作。

票数 1
EN

Stack Overflow用户

发布于 2017-06-04 01:57:44

显然,使用simple_form对按钮进行包装是不可能的。我想做同样的事情,我找到的解决方案是替换

代码语言:javascript
复制
config.button_class = 'btn'

使用

代码语言:javascript
复制
config.button_class = 'myclass1 myclass2'

config/initializers/simple_form.rb文件中。问题是,它将成为所有表单按钮的默认设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27535479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档