有没有办法禁用默认的formtastic布局?

时间:2010-11-01 10:53:02

标签: ruby-on-rails ruby-on-rails-3 webforms formtastic

对于一个特定情况,我想将表单呈现为(用于就地编辑)的一部分。在formtastic中是否有一种方法可以禁用.inputs / .buttons生成的布局?取而代之的是

<fieldset> <ol> <li> 

我想简单地将字段包装在

<td>

是否有内置方式或解决此问题的方法?

4 个答案:

答案 0 :(得分:2)

Formtastic中还没有内置方式来改变标记。要么使用CSS来调整充足的标记挂钩,要么放弃Formtastic用于此表单并按照自己的方式编写代码(就像我们以前一样)。

答案 1 :(得分:1)

它尚不支持,但您可以使用forked formtastic版本: https://github.com/linoj/formtastic

更多详情: http://www.vaporbase.com/postings/Replaceable_render_engines_for_Formtastic

在formtastic论坛上阅读它有一天甚至可能会合并到原点。

答案 2 :(得分:1)

在rails中,您可以覆盖定义用于呈现元素的标记的函数:

配置/初始化/ formtastic_foundation.rb:

# change required fields advice tag (abbr -> span)
Formtastic::FormBuilder.required_string =
proc { Formtastic::Util.html_safe(%{<span title="#{Formtastic::I18n.t(:required)}">*</span>}) }

module Formtastic
  module Helpers
    # change field wrapper (ol -> div)
    module FieldsetWrapper
      protected
      def field_set_and_list_wrapping(*args, &block) #:nodoc:
        contents = args.last.is_a?(::Hash) ? '' : args.pop.flatten
        html_options = args.extract_options!

        if block_given?
          contents = if template.respond_to?(:is_haml?) && template.is_haml?
          template.capture_haml(&block)
          else
            template.capture(&block)
          end
        end

        contents = contents.join if contents.respond_to?(:join)

        legend = field_set_legend(html_options)
          fieldset = template.content_tag(:fieldset,
          Formtastic::Util.html_safe(legend) << template.content_tag(:div, Formtastic::Util.html_safe(contents)),
          html_options.except(:builder, :parent, :name)
        )

        fieldset
      end
    end
  end

  module Inputs
    module Base
      # change input wrapper tag (li.default_clases -> div.large-12.columns inside div.row)
      module Wrapping
        def input_wrapping(&block)
          def super_wrapper_html_options
            {:class => 'row'}
          end

          new_class = [wrapper_html_options[:class], "large-12 columns"].compact.join(" ")

          template.content_tag(:div,
            template.content_tag(:div,
              [template.capture(&block), error_html, hint_html].join("\n").html_safe,
              wrapper_html_options.merge(:class => new_class)),
            super_wrapper_html_options)
        end
      end
    end
  end
end

我使用此代码将Formtastic 3与Foundation 5.4.5集成

答案 3 :(得分:-2)

我把我的调用包裹在一个字符串中的formtastic位(在我的haml文件中),然后将其分配出来

= "#{f.input ...}".gsub('<li class=', '<fart class=').html_safe #remove the li to align this input with the other text in the table. 

这比没有形式的重写表单更容易,而且效果很好。

不可否认,这不是一个理想的解决方案。尽管如此......我可以忍受它。