`
a420144030
  • 浏览: 81771 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义表单

阅读更多

有时候我们希望我们的表单拥有一致的显示风格,今天我们就看看用Rails怎样创建一个Helper来自定义表单。

1,实现自己的FormBuilder
在app/helpers/application_helper.rb里加入以下代码:
Java代码

 

 1. class TabularFormBuilder < ActionView::Helpers::FormBuilder  
 2.     (field_helpers - %w(check_box radio_button)).each do |selector|  
 3.       src = <<-END_SRC  
 4.         def #{selector}(field, options = {})  
 5.           @template.content_tag("tr",  
 6.             @template.content_tag("td", field.to_s.humanize + ":") +  
 7.               @template.content_tag("td", super))  
 8.         end  
 9.       END_SRC  
10.       class_eval src, FILE, LINE  
11.     end  
12. end  
13.   
14. def tabular_form_for(name, object = nil, options = nil, &proc)  
15.     concat("&lt;table&gt;", proc.binding)  
16.     form_for(name,  
17.              object,  
18.              (options||{}).merge(:builder => TabularFormBuilder),  
19.              &proc)  
20.     concat("&lt;/table&gt;", proc.binding)  
21. end

 

class TabularFormBuilder < ActionView::Helpers::FormBuilder
(field_helpers - %w(check_box radio_button)).each do |selector|
src = <<-END_SRC
def #{selector}(field, options = {})
@template.content_tag("tr",
@template.content_tag("td", field.to_s.humanize + ":") +
@template.content_tag("td", super))
end
END_SRC
class_eval src, FILE, LINE
end
end

def tabular_form_for(name, object = nil, options = nil, &proc)
concat("<table>", proc.binding)
form_for(name,
object,
(options||{}).merge(:builder => TabularFormBuilder),
&proc)
concat("</table>", proc.binding)
end

 

这里我们创建了tabular_form_for这个helper方法供页面使用,这里:builder => TabularFormBuilder用来生成一个table格式的表单。

 

2,在页面中使用自定义表单helper方法
Java代码

1. <% tabular_form_for :contact do |f| %>  
2.     <%= f.text_field :name %>  
3.     <%= f.text_field :email %>  
4.     <%= f.text_field :phone %>  
5. <% end %>

 

就这么简单!
让我们来给form table隔行加上背景色:
Java代码

 

 

 1. class TabularAlternatingColorFormBuilder < ActionView::Helpers::FormBuilder  
 2.   (field_helpers - %w(check_box radio_button)).each do |selector|  
 3.     src = <<-END_SRC  
 4.       def #{selector}(field, options = {})  
 5.         @template.content_tag("tr",  
 6.           @template.content_tag("td", field.to_s.humanize + ":") +  
 7.           @template.content_tag("td", super),  
 8.             :class => (@alt = (@alt ? false : true)) ? "alt-row" : ""  )  
 9.       end  
10.     END_SRC  
11.     class_eval src, FILE, LINE  
12.   end  
13. end  
14.   
15. def tabular_form_with_alternating_colors_for(name, object = nil, options = nil, &proc)  
16.     concat("&lt;table&gt;", proc.binding)  
17.     form_for(name,  
18.              object,  
19.              (options||{}).merge(:builder => TabularAlternatingColorFormBuilder),  
20.              &proc)  
21.     concat("&lt;/table&gt;", proc.binding)  
22. end

 

 

class TabularAlternatingColorFormBuilder < ActionView::Helpers::FormBuilder
(field_helpers - %w(check_box radio_button)).each do |selector|
src = <<-END_SRC
def #{selector}(field, options = {})
@template.content_tag("tr",
@template.content_tag("td", field.to_s.humanize + ":") +
@template.content_tag("td", super),
:class => (@alt = (@alt ? false : true)) ? "alt-row" : "" )
end
END_SRC
class_eval src, FILE, LINE
end
end

def tabular_form_with_alternating_colors_for(name, object = nil, options = nil, &proc)
concat("<table>", proc.binding)
form_for(name,
object,
(options||{}).merge(:builder => TabularAlternatingColorFormBuilder),
&proc)
concat("</table>", proc.binding)
end

修改default.css:
Java代码

1. .alt-row {  
2.   background: #fab444;  
3. }

 

.alt-row {
background: #fab444;
}

页面调用:
Java代码

 

1. <%= stylesheet_link_tag "default" %>  
2.   
3. <% tabular_form_with_alternating_colors_for :contact do |f| %>  
4.     <%= f.text_field :name %>  
5.     <%= f.text_field :email %>  
6.     <%= f.text_field :phone %>  
7. <% end %>

  

分享到:
评论

相关推荐

    JAVA动态表单设计,自定义表单,自定义数据

    JAVA动态表单设计,自定义表单,自定义数据,在线设计,数据库存储

    自定义表单初步设计文档

    做电子政务、系统OA很多年了,近期公司让我设计一款自定义表单,简单来讲,就是用户可自己定义表单模板,上传系统,就可进行流程审批工作。 这方面网上资料非常少,只讲一个大概,通过一段时间的研究,以及针对致远...

    C# winfrom 自定义表单设计器

    一个基于.NET C# 开发的 Winform 自定义表单设计组件。支持Xml保存和加载表单,支持控件的拖放和属设置,支持复制、粘贴、对齐、撤销、重做等设计时操作。

    WordPress自定义表单插件cformsII

    功夫不负有心人,笔者终于找的了这样的一款强大的表单插件,它就是cformsII,cforms意思为custom forms,就是自定义表单的意思。 cformsII具有以下功能: •设定自定义表单,允许插入到页面,日志中去; •非常强悍...

    自定义表单设计思路.docx

    为了满足和现有工作流系统的耦合,在适当改动现有工作流的基础上,对自定义表单系统(包括与工作流相关)的设计做出如下的规划: 1.基础功能模块:部门、角色、人员信息、班组、岗位(这些都可能是潜在的流程参与者...

    asp自定义表单系统

    自定义表单系统使用说明: 后台地址:biaodan/admin/admin_login.asp,第一次打开本后台,会提示重新安装目录,安装好,删除biaodan/install.asp文件后,即可使用。后台用户名:admin,后台密码:admin。 默认开启...

    金和OA自定义表单说明单

    由简到繁介绍金和OA C6版自定义表单编写.

    java自定义表单系统

    自定义表单,因为涉及到界面的展示,人机操作交互,页面的构件一定要丰富 自定义表单,有可视化表单设计界面,直接采用拖、拉、点、拽的方式来

    表自定义表单+工作流.zip

    集成activiti的springboot程序,带有自定义表单设计,低代码开发平台。

    asp自定义表单,使用户可以自定义数据模型

    asp自定义表单实现 使用用户自定义模型 支持模型与模板绑定

    activiti自定义表单demo.rar

    本代码,技术为springboot activiti 工作流引擎技术,人员可以动态设置自定义流程,后台生成流程图并且部署流程,

    自定义表单设计思路

    自定义表单设计思路

    论文研究-基于自定义表单的工作流过程定义分析与设计.pdf

    为了实现自定义表单与工作流过程的有效结合,提出了一种基于自定义表单的工作流系统体系结构。首先分析了表单模型的定义及表单系统的设计方法,然后将工作流处理过程定义为扩展后的流程节点的有序集合,通过在工作流...

    自定义表单设计器演示程序

    自定义表单设计器的演示程序,提供了2个示例模板,如果感兴趣,再下载自定义表单设计器演示版源码(C#)。源码下载地址:http://download.csdn.net/source/3043185

    自定义表单的实现源代码

    自定义表单的实现源代码 绝对实用,阐述自定义表单的实现过程和原理 http://zjava.org.ru/

    自定义表单设计器演示版源码(C#)

    自定义表单设计器演示版源码(C#) 可以自行设计表单并保存

    jquery自定义表单控件.rar

    jquery自定义表单控件

    基于layui自定义表单组件

    主要用于C#开发,方便、快捷、效率高

    Django自定义表单引擎Autoforms.zip

    Autoforms是Jeff开源的一个基于Django的自定义表单引擎,可用于调查、投票、信息收集甚至是整合至工作流程引擎和PAAS平台当中。 AutoForms的主要特性: 支持14种字段类型13种html输入控件(包括日期选择组件)...

    动易SW6.8自定义表单插件

    给动易的siteweaver增加自定义表单,可在后台增加表单字段、类型、数据管理等。找了很久,网上都没有。花钱在淘宝上买的。。共享出来。

Global site tag (gtag.js) - Google Analytics