- 浏览: 105174 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tiroc:
liushooter 写道灰常感谢 tiroc
Monkey Patch让Paperclip支持中文名称的文件上传 -
liushooter:
灰常感谢 tiroc
Monkey Patch让Paperclip支持中文名称的文件上传 -
tiroc:
snjxiaojing 写道原来如此,谢大哥~~~
Ubuntu下设置Sublime Text 2汉字显示 -
snjxiaojing:
原来如此,谢大哥~~~
Ubuntu下设置Sublime Text 2汉字显示 -
tiroc:
snjxiaojing 写道tiroc 写道snjxiaoji ...
Ubuntu下设置Sublime Text 2汉字显示
从Redmine中备份出来的,有时间再重新排版
h2. SimpleForm 2.0和 Formtastic 的整体比较
Formtastic 的主要缺点在于对HTML输出的可定制性上不够灵活。目前的系统中,想要满足各种表单的需求,就需要在每个表单页写很多重复的代码进行设置,甚至很多页面都在使用 Rails 原生的 Form Builder,这样做维护量太大。
SimpleForm 在用法上与 Formtastic 类似,同样很好的支持了I18n、表间关联、嵌套表单和表单验证等常用的功能。SimpleForm 从 2.0 开始,在可定制性上有质的突破(Twitter Bootstrap 在里边起了很关键的作用),现在的它更像是一个 Form Builder 框架,可以很方便的对它进行设置和扩展。
h2. 使用 SimpleForm 替换 Formtastic 需要做的修改
# 把 @semantic_form_for@ 替换为 @simple_form_for@
# 去掉 @<%= f.inputs do %> ... <% end %>@ 和 @<%= f.buttons do %> ... <% end %>@,替换成对应的div
h2. SimpleForm 2.0使用方法
h3. 1、核心概念:wrapper
*通常一个表单项有这些部分(SimpleForm文档中称为 component):*
# label
# input
# hint
# error
# 把上面4个 component 包含在内部的一个“容器”,通常会是一个div标签
把以上的“容器”及其内部的各个元素看成一个整体,就是一个 wrapper 了。如果把 textarea、select 这些看成是和 input 等价的东西,那么一个表单就是N个顺序排列的 wrapper 组成的。在 SimpleForm 中,对表单进行定制时,只需在配置文件中设置好N种 wrapper,然后在 _form.html.erb 中进行正常调用即可。默认情况下,一个表单中的各个表单项都使用相同的 wrapper,我们还可以对每一个表单项单独设置,以满足特殊的定制需求。在更极端的情况下,当然也可以在表单页面直接设置 HTML 标签、class 等。有了 wrapper,不管是先出前端页面,还是后端表单模板写好后需要更改,只要同样类型表单的 HTML 和 CSS 结构相对统一,就能大量的减少我们的工作量。
h3. 2、使用示例
<pre>
<%= simple_form_for @staffer, validate: true do |f| %>
<div class="form-inputs">
<%= f.input :username, wrapper: :inline %>
<%= f.input :password %>
<%= f.input :password_confirmation %>
<%= f.input :email %>
<%= f.input :fullname %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
</pre>
h3. 3、配置 SimpleForm
配置文件位于config/initializers/simple_form.rb,以 Bootstrap 的默认配置进行说明:
<pre><code class="ruby">
SimpleForm.setup do |config|
# 定义一个名字为 :default 的 wrapper
config.wrappers :default, :class => :input,
:hint_class => :field_with_hint, :error_class => :field_with_errors do |b|
# 输出 HTML5 标签
b.use :html5
# Calculates placeholders automatically from I18n
# You can also pass a string as f.input :placeholder => "Placeholder"
b.use :placeholder
## Optional extensions
# They are disabled unless you pass `f.input EXTENSION_NAME => :lookup`
# to the input. If so, they will retrieve the values from the model
# if any exists. If you want to enable the lookup for any of those
# extensions by default, you can change `b.optional` to `b.use`.
# Calculates maxlength from length validations for string inputs
b.optional :maxlength
# Calculates pattern from format validations for string inputs
b.optional :pattern
# Calculates min and max from length validations for numeric inputs
b.optional :min_max
# Calculates readonly automatically from readonly attributes
b.optional :readonly
# :label_input 是 :label 和 :input 的打包,后边会看到它们单独出现的情况
# label、input、hint 和 error 在表单中的顺序由他们在配置文件中定义的顺序决定
b.use :label_input
b.use :hint, :wrap_with => { :tag => :span, :class => :hint }
b.use :error, :wrap_with => { :tag => :span, :class => :error }
end
# 通过参数定制最外层的“容器”的标签为 div.control-group
config.wrappers :bootstrap, :tag => 'div', :class => 'control-group', :error_class => 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
# 这个 wrapper 方法可以嵌套,调用它可以在输出结果中增加一个 HTML 标签
b.wrapper :tag => 'div', :class => 'controls' do |ba|
ba.use :input
# 定制出错信息包含在一个 span.help-inline 标签中
ba.use :error, :wrap_with => { :tag => 'span', :class => 'help-inline' }
# 定制提示信息包含在一个 p.help-block 标签中
ba.use :hint, :wrap_with => { :tag => 'p', :class => 'help-block' }
end
end
config.wrappers :prepend, :tag => 'div', :class => "control-group", :error_class => 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.wrapper :tag => 'div', :class => 'controls' do |input|
# 这里就使用了嵌套的 wrapper 以输出 2 层 div 标签
input.wrapper :tag => 'div', :class => 'input-prepend' do |prepend|
prepend.use :input
end
input.use :hint, :wrap_with => { :tag => 'span', :class => 'help-block' }
input.use :error, :wrap_with => { :tag => 'span', :class => 'help-inline' }
end
end
config.wrappers :append, :tag => 'div', :class => "control-group", :error_class => 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.wrapper :tag => 'div', :class => 'controls' do |input|
input.wrapper :tag => 'div', :class => 'input-append' do |append|
append.use :input
end
input.use :hint, :wrap_with => { :tag => 'span', :class => 'help-block' }
input.use :error, :wrap_with => { :tag => 'span', :class => 'help-inline' }
end
end
# 设置默认 wrapper
config.default_wrapper = :bootstrap
# 单选按钮和复选框与 label 的位置关系,:nested 是专门为 Bootstrap定制的,我们通常用 :inline
# :inline => input + label
# :nested => label > input
config.boolean_style = :nested
# 按钮默认的 class
config.button_class = 'btn'
# Default tag used for error notification helper.
config.error_notification_tag = :div
# CSS class to add for error notification helper.
config.error_notification_class = 'alert alert-error'
# 设置必填项的 label 中星号放到文字后边
config.label_text = lambda { |label, required| "#{label} #{required}" }
# 设置 label 的 class,默认为 nil
config.label_class = 'control-label'
# 表单的默认 class
config.form_class = :simple_form
# 禁止浏览器对表单校验(HTML5),因为客户端校验我们都使用JavaScript插件,以便各浏览器效果统一
config.browser_validations = false
# 表单输入框默认长度
config.default_input_size = 20
end
</code></pre>
*因为注释中的代码看不清,我删除了很多默认设置选项,更多参数说明及用法请看:* https://github.com/plataformatec/simple_form https://github.com/plataformatec/simple_form/wiki
h2. SimpleForm 2.0和 Formtastic 的整体比较
Formtastic 的主要缺点在于对HTML输出的可定制性上不够灵活。目前的系统中,想要满足各种表单的需求,就需要在每个表单页写很多重复的代码进行设置,甚至很多页面都在使用 Rails 原生的 Form Builder,这样做维护量太大。
SimpleForm 在用法上与 Formtastic 类似,同样很好的支持了I18n、表间关联、嵌套表单和表单验证等常用的功能。SimpleForm 从 2.0 开始,在可定制性上有质的突破(Twitter Bootstrap 在里边起了很关键的作用),现在的它更像是一个 Form Builder 框架,可以很方便的对它进行设置和扩展。
h2. 使用 SimpleForm 替换 Formtastic 需要做的修改
# 把 @semantic_form_for@ 替换为 @simple_form_for@
# 去掉 @<%= f.inputs do %> ... <% end %>@ 和 @<%= f.buttons do %> ... <% end %>@,替换成对应的div
h2. SimpleForm 2.0使用方法
h3. 1、核心概念:wrapper
*通常一个表单项有这些部分(SimpleForm文档中称为 component):*
# label
# input
# hint
# error
# 把上面4个 component 包含在内部的一个“容器”,通常会是一个div标签
把以上的“容器”及其内部的各个元素看成一个整体,就是一个 wrapper 了。如果把 textarea、select 这些看成是和 input 等价的东西,那么一个表单就是N个顺序排列的 wrapper 组成的。在 SimpleForm 中,对表单进行定制时,只需在配置文件中设置好N种 wrapper,然后在 _form.html.erb 中进行正常调用即可。默认情况下,一个表单中的各个表单项都使用相同的 wrapper,我们还可以对每一个表单项单独设置,以满足特殊的定制需求。在更极端的情况下,当然也可以在表单页面直接设置 HTML 标签、class 等。有了 wrapper,不管是先出前端页面,还是后端表单模板写好后需要更改,只要同样类型表单的 HTML 和 CSS 结构相对统一,就能大量的减少我们的工作量。
h3. 2、使用示例
<pre>
<%= simple_form_for @staffer, validate: true do |f| %>
<div class="form-inputs">
<%= f.input :username, wrapper: :inline %>
<%= f.input :password %>
<%= f.input :password_confirmation %>
<%= f.input :email %>
<%= f.input :fullname %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
</pre>
h3. 3、配置 SimpleForm
配置文件位于config/initializers/simple_form.rb,以 Bootstrap 的默认配置进行说明:
<pre><code class="ruby">
SimpleForm.setup do |config|
# 定义一个名字为 :default 的 wrapper
config.wrappers :default, :class => :input,
:hint_class => :field_with_hint, :error_class => :field_with_errors do |b|
# 输出 HTML5 标签
b.use :html5
# Calculates placeholders automatically from I18n
# You can also pass a string as f.input :placeholder => "Placeholder"
b.use :placeholder
## Optional extensions
# They are disabled unless you pass `f.input EXTENSION_NAME => :lookup`
# to the input. If so, they will retrieve the values from the model
# if any exists. If you want to enable the lookup for any of those
# extensions by default, you can change `b.optional` to `b.use`.
# Calculates maxlength from length validations for string inputs
b.optional :maxlength
# Calculates pattern from format validations for string inputs
b.optional :pattern
# Calculates min and max from length validations for numeric inputs
b.optional :min_max
# Calculates readonly automatically from readonly attributes
b.optional :readonly
# :label_input 是 :label 和 :input 的打包,后边会看到它们单独出现的情况
# label、input、hint 和 error 在表单中的顺序由他们在配置文件中定义的顺序决定
b.use :label_input
b.use :hint, :wrap_with => { :tag => :span, :class => :hint }
b.use :error, :wrap_with => { :tag => :span, :class => :error }
end
# 通过参数定制最外层的“容器”的标签为 div.control-group
config.wrappers :bootstrap, :tag => 'div', :class => 'control-group', :error_class => 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
# 这个 wrapper 方法可以嵌套,调用它可以在输出结果中增加一个 HTML 标签
b.wrapper :tag => 'div', :class => 'controls' do |ba|
ba.use :input
# 定制出错信息包含在一个 span.help-inline 标签中
ba.use :error, :wrap_with => { :tag => 'span', :class => 'help-inline' }
# 定制提示信息包含在一个 p.help-block 标签中
ba.use :hint, :wrap_with => { :tag => 'p', :class => 'help-block' }
end
end
config.wrappers :prepend, :tag => 'div', :class => "control-group", :error_class => 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.wrapper :tag => 'div', :class => 'controls' do |input|
# 这里就使用了嵌套的 wrapper 以输出 2 层 div 标签
input.wrapper :tag => 'div', :class => 'input-prepend' do |prepend|
prepend.use :input
end
input.use :hint, :wrap_with => { :tag => 'span', :class => 'help-block' }
input.use :error, :wrap_with => { :tag => 'span', :class => 'help-inline' }
end
end
config.wrappers :append, :tag => 'div', :class => "control-group", :error_class => 'error' do |b|
b.use :html5
b.use :placeholder
b.use :label
b.wrapper :tag => 'div', :class => 'controls' do |input|
input.wrapper :tag => 'div', :class => 'input-append' do |append|
append.use :input
end
input.use :hint, :wrap_with => { :tag => 'span', :class => 'help-block' }
input.use :error, :wrap_with => { :tag => 'span', :class => 'help-inline' }
end
end
# 设置默认 wrapper
config.default_wrapper = :bootstrap
# 单选按钮和复选框与 label 的位置关系,:nested 是专门为 Bootstrap定制的,我们通常用 :inline
# :inline => input + label
# :nested => label > input
config.boolean_style = :nested
# 按钮默认的 class
config.button_class = 'btn'
# Default tag used for error notification helper.
config.error_notification_tag = :div
# CSS class to add for error notification helper.
config.error_notification_class = 'alert alert-error'
# 设置必填项的 label 中星号放到文字后边
config.label_text = lambda { |label, required| "#{label} #{required}" }
# 设置 label 的 class,默认为 nil
config.label_class = 'control-label'
# 表单的默认 class
config.form_class = :simple_form
# 禁止浏览器对表单校验(HTML5),因为客户端校验我们都使用JavaScript插件,以便各浏览器效果统一
config.browser_validations = false
# 表单输入框默认长度
config.default_input_size = 20
end
</code></pre>
*因为注释中的代码看不清,我删除了很多默认设置选项,更多参数说明及用法请看:* https://github.com/plataformatec/simple_form https://github.com/plataformatec/simple_form/wiki
发表评论
-
RSpec笔记 - let 和 let!
2013-11-24 00:20 2069RSpec 的 let 是一个很方便的用法,但是今天在写一段测 ... -
初次在Rails项目中使用PostgreSQL,纪录一些简单的步骤
2013-11-16 10:26 1226一、安装PostgreSQL Ubuntu 下可以用 apt- ... -
[gem] acts_as_list
2013-07-09 15:09 925注意事项: 1. 当在 STI 中,用 type 字段来做 s ... -
使用 rails_admin + cancan 时,发生 No route matches {:controller=>"home"}
2013-04-12 09:32 1950囧 rails_admin 官方的 wiki 中已经写了,是我 ... -
Rails中Mongoid的时间日期字段使用 datetime_select
2013-01-23 01:57 1123http://stackoverflow.com/questi ... -
Mongoid::Criteria 和数组
2012-10-23 12:49 1916因为 Mongoid::Criteria 的实例可以响应一些迭 ... -
Rails 3 Client Side Validations 工作机制备忘
2012-09-05 15:06 2081最近看了一下 Client Side Validations ... -
平时收集的点滴知识点
2012-08-24 17:50 0大数据量 的时候 对db进行更改 需要谨慎 加字段非常慢的 ... -
Rails 开发小贴士积累
2012-08-24 14:25 859Model (ActiveRecord) 中 Boole ... -
Rails文件上传MIME类型值
2012-08-03 22:16 1000在做文件上传功能的时候,需要限制文件上传的类型,通常获取MIM ... -
Sphinx后台运行
2012-02-27 18:03 0好像直接运行/usr/local/sphinx/bin/sea ... -
Monkey Patch让Paperclip支持中文名称的文件上传
2012-02-05 14:06 1969使用Paperclip上传文件,如果文件名包含中文,会导致Ar ... -
Ubuntu下设置Sublime Text 2汉字显示
2011-12-07 10:49 7052Sublime Text 2是一款收费软件,不过目前它可以无限 ... -
Monkey Patch让Simple Form支持Bootstrap
2011-12-06 14:17 2210Twitter推出Bootstrap有段时 ... -
将Rails项目从Ruby 1.8.7升级到Ruby 1.9.2的脚本
2011-12-01 18:20 1341Ruby 1.9的代码文件中,如果包含了utf-8字符,那么需 ... -
部署Rails项目
2011-11-22 09:59 0使用Nginx部署的时候,要先通过Capistrano把项目部 ... -
Ubuntu 11.10安装RMagick
2011-11-09 21:06 1602Ubuntu 11.10(DVD)默认就安装了ImageMag ... -
使用Cucumber测试Rails时,预先装载seeds.rb中的数据
2011-10-19 22:03 1907我习惯把网站的一些预设数据放到db/seeds.rb中,比如网 ... -
Rails:小心_destroy的autocomplete
2011-09-27 10:12 1445在Rails的嵌套表单中, 如果在model的accepts_ ... -
Rails3 ActiveRecord::ReadOnlyRecord的解决办法
2011-07-22 16:22 1290通过model间的关联find出来的对象,默认是只读的 ...
相关推荐
本文将详细介绍Ext2.0 FormPanel的使用,包括创建方法、控件配置以及布局管理。 首先,我们需要初始化提示信息功能和设置错误信息显示位置。通过`Ext.QuickTips.init()`启动快速提示功能,以便为表单中的控件提供...
Struts2.0是一个强大的Java Web开发框架,它极大地简化了MVC(Model...理解和熟练使用这些标签,是掌握Struts2.0的关键步骤。通过深入学习和实践,开发者可以更好地驾驭Struts2.0框架,创建出高效、稳定的Web应用程序。
这个"Struts2.0指南(chm)"包含了对Struts2.0框架的详细讲解,特别是关于其标签的使用。 在Struts2.0中,标签是视图层的重要组成部分,它们简化了HTML页面的编码,增强了代码的可读性和可维护性。以下是一些关键的...
<s:form action="HelloWorld" theme="simple"> Locale: <s:textfield name="loc" /> </s:form> <h2><s:property value="msg" /> ``` 在这个页面中,`<s:fielderror />` 用来显示由 `validate` 方法添加...
FormTag FrameworkPortlet FrameworkServlet FreeMarkerConfig FreeMarkerConfigurationFactory FreeMarkerConfigurationFactoryBean FreeMarkerConfigurer FreeMarkerTemplateUtils FreeMarkerView ...
### Oracle Real Application Clusters (RAC) on Oracle VM Server for SPARC 2.0 #### Introduction In the realm of enterprise computing, organizations are constantly seeking ways to reduce costs while ...
-这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\...
The AX88772B Low-power USB 2.0 to 10/100M Fast Ethernet controller is a high performance and highly integrated ASIC which enables low cost, small form factor, and simple plug-and-play Fast Ethernet ...
AxureUX交互原型Web元件库精简版v1.1.rplibAxureUX前后端Web交互原型通用元件库v2.0.rplibAxureUX数据可视化图表组件库整理.rplib Axure标准化组件库.rplib Axure高大上低保证组件库Stwo奉献.rplibDefault.rplib ...
支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: ...
3. **Form Tag**: `<s:form action="up" enctype="multipart/form-data" theme="simple" method="post">`定义了一个使用multipart/form-data编码方式的表单,这是上传文件所必需的。主题设为“simple”,简化了表单...
Simple QQ Login v1.1(QQ号码登录器) 发布时间:2009-4-26 开发环境:Visual Studio 2008(C# 2.0) 测试环境:XP(.NET Framework 2.0)+QQ 2008 ...刚开发 Form 不久,错误难免,只希望与各位朋友共同学习、进步!
LiveGraph is a framework for real-time data...These features make LiveGraph particularly useful for all applications that require live visualisation of large amounts of data in form of graphs and charts.
A simple UI widget for web with vue 2.0 风格指南 组件 base Icon 图标 Grid 栅格 form Button 按钮 Input 输入框 Radio 单选框 Checkbox 复选框 Switch 开关 Select 选择框 Update 上传 Cropper 裁剪 ...
form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签 13.9....
这是Ember Simple Auth库的扩展,该库提供了与OAuth 2.0兼容的身份验证器和授权者。 在Ember.js应用程序和OAuth 2.0服务器之间交换用户的凭据以及令牌时,您必须确保该连接使用HTTPS! 认证者 身份验证器(请参阅...
在默认情况下,ASP.NET使用Cookie来管理Session ID,但这并不是唯一的方法。可以通过设置`<sessionState mode="InProc"/>`来使用应用程序域内的内存来存储Session数据,这种方式不需要Cookie。此外,还可以使用SQL ...
Simple Vue验证程序Simple Vue验证程序是Vue.js 2.0的轻量级但灵活的插件,可让您验证输入字段,并显示er Simple Vue验证器Simple Vue验证程序是Vue.js 2.0的轻量级但又灵活的插件,可让您验证输入字段,并显示错误...
此项目可能基于ssi(Simple Scalable Infrastructure)框架,这是一种轻量级的架构,用于简化开发和部署过程,提高系统的可扩展性和可维护性。 数据库部分使用了SQL Server 2000,这是一个关系型数据库管理系统,...