Blog信息 |
blog名称: 日志总数:1304 评论数量:2242 留言数量:5 访问次数:7577944 建立时间:2006年5月29日 |

| |
[Ruby on Rails]Rails 新特性:simply_helpful 软件技术
lhwork 发表于 2007/2/8 10:34:50 |
Rails SVN 多了一个新插件,simply_helpful,它的意图似乎是要对一些常用的 helper 功能进行简化。
我猜想用插件来实现是不希望对任何人运行的 Edge Rails 造成影响,直到它100%稳定并100%向后兼容。因此如果你想看看这些变动,那么你需要安装该插件到你的应用程序中。
script/plugin install simply_helpful
安装完该插件后,一些基本的 helper 就得到了简化。例如,在用于我的 Venues 控制器的 index.rhtml 内,我曾给这样写过:
<table>
<tr><th>Name</th> <th>City</th> <th>Postcode</th></tr>
<%= render :partial => 'venue', :collection => @venues %>
</table>
注:该表被极大地简单化了;我删去了大部分东西,以更好地理解 simply_helpful 做了什么。
假设 Rails 可以告诉我的 @venues 数组是用 Venue 实例变量组成的,那么新的 helper 不需要我在明确地指出我使用的局部模板名字:
<table>
<tr><th>Name</th> <th>City</th> <th>Postcode</th></tr>
<%= render :partial => @venues %>
</table>
因此 :collection 键就变成多余的了(我们在传递一个数组,所以会被假设为一个集合),就像局部模板组件本身的命名 --- simply_helpful 自动地从被传递对象的类来获得它的位置 --- 在这个例子中,因为它是一个 Venue 对象集合,所以局部模板被假设为位于 venues/_venue.rhtml。
上述是集合局部模板的渲染,你也可以得到下面特性:
DOM ID 属性
<%= dom_id(object, prefix = nil) %>
将为屏幕上对象提供一个基于对象的类及数据库 ID 的 HTML ID 属性值。例如,在 dom_id(@person) 中, @person 是个数据库 ID 为 123 的 Person 实例,该表达式将返回 person_123 。如果对象还没有被保存到数据库内,id 将会是 new_object_name 。
通过这个特性可增强 RJS helper ,它意味着你现在可以直接链接到页面上的表现数据对象的 DOM 对象上。现在,下面表现的意思是相同的:
page[:person_123]
page[dom_id(@person)]
page[@person]
DOM Class names
<%= dom_class(object) %>
创建基于 object 类的 CSS 类名称 --- 因此 ProductionType 对象将得到一个 production_type DOM class 。
这个新特性可能没有 dom_id 对渲染增强的那么激动人心,但是在下一个特性内使用该特性的话,它会为你的 DOM 对象增强清晰的,易读的,一致的类名称。
Form blocks
新的 form_for 句法与新的 Restful 路由结合,会很大地简化表单设置:
1、表单的动作指向一个 update 还是 create 动作,依赖于你的对象是否在先前被保存过。
2、表单将自动地得到一个 new_object 或 edit_object_#(此处的 object 是对象的类名称,并且 # 是它的数据库 ID) 的 DOM id ,这依赖于它是否是一个新的表单。
3、表单也将自动地得到一个 new_object 或 edit_object 类名字(同样,这儿的 object 也依赖于你的对象的类名字)
这意味着对 form_for 的那个调用会得到最大的简化。例如,现在这一行将可对新的及现有的 Venue 实例两者工作:
<% form_for @venue do |f| %>
...
对现有的 venue 对象,将产生:
<form action="http://localhost:3000/venues/123"
class="edit_venue"
id="edit_venue_123"
method="post">
<input name="_method" type="hidden" value="put" />
同样的一行代码对于一个新的 venue 对象,产生:
<form action="http://localhost:3000/venues"
class="new_venue"
id="new_venue"
method="post">
<input name="_method" type="hidden" value="post" />
http://www.matthewman.net/articles/2006/09/04/new-rails-feature-simply_helpful
象 SimplyRestful,虽然可以继续用常规方式做事,但如果你使用它,会得到一些更为自由的便利。当 SimplyRestful 承担了控制器端的事情时,在视图端就会开始了一些魔术。
例如:
@person # => <Person id: 1>
render :partial => @person
与下面是一样的:
render :partial => 'people/person', :object => @person
并且
render :partial => @people
与下面一样:
render :partial => 'people/person', :collection => @person
同样
page[@person]
与这个一样
page[dom_id(@person)]
它是
page[:person_1]
同样:
id="< %= "person_" + @person.id%>“
与下面一样:
< % =@person.dom_id%> |
|
|