`
a420144030
  • 浏览: 83678 次
  • 性别: 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 %>

  

分享到:
评论

相关推荐

    activiti自定义表单demo.rar

    在本项目"activiti自定义表单demo"中,我们主要关注的是如何使用SpringBoot集成Activiti工作流引擎,实现自定义表单和流程。这个Demo提供了完整的代码示例,帮助开发者理解并应用到实际项目中。以下是相关知识点的...

    C# winfrom 自定义表单设计器

    **C# WinForm自定义表单设计器** 在.NET框架中,C#是一种广泛使用的编程语言,尤其在开发桌面应用程序时,WinForm是一个重要的选择。本文将深入探讨如何使用C#来构建一个自定义的WinForm表单设计器。这个设计器允许...

    基于layui自定义表单组件

    【基于layui自定义表单组件】是针对C#开发者设计的一种高效前端开发工具,它结合了layui框架的优势,为创建动态、交互性强的Web表单提供了便利。layui是一款优秀的前端轻量级框架,以其简洁的代码结构、丰富的模块...

    自定义表单设计思路.docx

    ### 自定义表单设计思路详解 #### 一、概述 自定义表单系统的设计目标是为了更好地与现有的工作流系统相结合,提升工作效率与灵活性。本文档将深入探讨自定义表单设计的关键点及其实施策略。 #### 二、基础功能...

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

    自定义表单设计器是一种强大的工具,它允许用户根据自己的需求创建和定制各种数据输入界面,无需深入编程细节。本项目提供了C#语言实现的自定义表单设计器的演示版源码,这对于开发者来说是一个很好的学习资源,特别...

    自定义表单设计思路

    自定义表单设计思路 本文主要讲述了自定义表单设计思路的总体规划,旨在满足和现有工作流系统的耦合,通过对自定义表单系统的设计来实现表单权限、记录权限、字段权限等功能。下面是自定义表单设计思路的详细内容:...

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

    总的来说,"JAVA动态表单设计,自定义表单,自定义数据"涉及的技术栈包括Java后端开发、前端界面设计、数据库管理和RESTful API设计。通过以上各模块的协同工作,可以构建出一个高效、易用的动态表单系统,满足不同...

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

    本文将深入探讨这两个技术以及如何将它们整合用于实现自定义表单和工作流。 首先,SpringBoot是Spring框架的一个轻量级封装,它简化了Spring应用程序的配置和启动过程。通过内置的Tomcat服务器和自动配置特性,...

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

    自定义表单设计器是开发应用程序时经常会用到的一种工具,尤其在企业级应用中,它允许用户根据业务需求创建和定制自己的数据输入界面。本文将详细介绍C#环境下自定义表单设计器的相关知识点,并结合提供的源码进行...

    自定义表单的实现源代码

    在IT领域,自定义表单的实现是网页和应用程序中不可或缺的一部分。自定义表单允许开发者根据特定需求创建用户交互界面,收集用户数据,并进行处理。以下是对自定义表单实现过程和原理的详细说明: 一、表单基础 ...

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

    自定义表单设计器是一种强大的工具,它允许用户根据自己的需求创建和定制各种表单,而无需深入编程。在“自定义表单设计器演示程序”中,我们能够探索这种技术的实际应用,通过提供的两个示例模板,可以更好地理解其...

    自定义表单Winform

    本示例代码主要关注的是如何在Winform应用中实现自定义表单,以满足特定的需求和增强用户体验。 在Winform中,自定义表单通常涉及以下方面: 1. **自定义控件**:如果你发现内置的控件无法满足需求,你可以创建...

    自定义表单初步设计文档

    自定义表单初步设计文档是针对电子政务和企业办公自动化(OA)系统中的一项关键功能进行的详细设计记录。在当前信息化高度发展的时代,自定义表单能力允许用户根据自身需求自由设定表单模板,极大地提高了工作效率和...

    WordPress自定义表单插件cformsII

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

    PHP自定义表单生成

    2. 响应式设计:现代网页设计强调响应式,自定义表单生成时应考虑不同设备的显示效果。可以利用Bootstrap或其他前端框架来实现跨平台的兼容性,使表单在手机、平板和桌面电脑上都有良好的用户体验。 三、表单数据...

    asp自定义表单系统

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

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

    动易SW6.8自定义表单插件是一款专为动易Sitetweaver内容管理系统设计的扩展功能组件。这款插件的主要目的是增强网站后台的功能,允许管理员在不编程的情况下自定义创建各种表单,以满足不同的数据收集需求。表单的...

    自定义表单(拖拽式表单)

    自定义表单是一种高效、灵活的设计工具,它允许用户通过直观的拖拽方式构建复杂的表单结构,无需深入编程知识。在本主题中,我们将详细探讨基于jQuery的formBuilder插件,以及如何对其进行修改以满足特定需求。 1. ...

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

    首先,"asp自定义表单"指的是在ASP应用中设计一个可配置的表单,用户可以根据需求定制表单字段、类型以及布局。这种功能通常通过后台数据库和前端交互实现,用户在前端界面选择或输入表单结构,然后这些信息被保存到...

Global site tag (gtag.js) - Google Analytics