今天在修改论坛的版主操作工具条时,偶然发现一个好东西,就是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开发的小工具,能大幅提供生产率啊!
本文介绍如何利用Rails框架中的CaptureHelper解决视图代码重复问题,通过Capture方法优雅地复用版主工具条代码,提高开发效率。

被折叠的 条评论
为什么被折叠?



