浏览 2581 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-15
最后修改:2009-12-15
今天在修改论坛的版主操作工具条时,偶然发现一个好东西,就是CaptureHelper中的Capture方法,可以很优雅的解决view中片段重复利用的问题。
设想一下这样的场景:论坛帖子页面需要为版主提供一个版主操作工具条,这个工具条件有好几个按钮,比如删帖,置精华和置顶等等,为生成这个工具条需要进行数量可观的条件判断以及html拼接。为方便版主使用,通常我们需要两个地方--顶部和底部都提供这个工具条。
按照通常的做法,把这两大段代码写上重复的两份,一份放在顶部,一份放在底部。这样导致的问题是: 1,重复的代码,修改维护起来特头疼,容易出错; 2,从执行效率来说,做两次重复的判断和拼接,不划算。
本着Rails DRY的原则,当然不允许这样的事情存在。今天发现Rails CaptureHelper中的Capture方法可以巧妙、优雅的解决这个问题。其实说起来也很简单,看一下下面的伪代码就明白了。
#这是view中的代码 <% toolbar_html = capture do %> #这里是生成toolbar的大段判断和拼接代码 <% end %> #这里是顶部版主工具条 <%=toolbar_html%> ...... #这里是底部版主工具条 <%=toolbar_html%> 其原理也简单,无非是把做为capture block参数的erb段先执行生成html放到一个临时变量中,再在页面重复使用。
后来看了一下will_paginate的页码控制html,也是用了capture来实现重复利用。
Ruby on Rails不愧是从第一线的web开发人员开发出来的现代web框架,很多非常便利web开发的小工具,能大幅提供生产率啊! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-16
局部模板是不是更优雅一点?
|
|
返回顶楼 | |
发表时间:2009-12-16
netfork 写道 局部模板是不是更优雅一点?
使用局部模板可以避免代码重复的问题,不过使用局部模板的话这部分代码是重复执行的,效率不好哦。 |
|
返回顶楼 | |
发表时间:2009-12-20
这种问题一般都是用partial处理的较多,我想你那个其实也是基于局部模板的罢
|
|
返回顶楼 | |