本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

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%>


阅读全文(2328) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.078 second(s), page refreshed 144758484 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号