HAML
HAML的作者Hampton认为:RoR作为一个革命性的Web开发框架,但是它的模板系统却依然延续了旧世界(ASP,PHP,JSP)的风格,这实在是让人难以接受,于是就有了HAML。
HAML相比RHTML最大的优点就是结构更清晰,代码更优美,并且生成页面完全兼容XHTML,下面就让我们通过一个例子来看看HAML是如何工作的吧:
首先,你需要为你的Rails应用安装HAML插件:
./script/plugin install http://svn.hamptoncatlin.com/haml/tags/stable
然后修改你的RHTML文件后缀为HAML(比如app/view/people/index.rhtml改为app/view/people/index.haml)。
如果你的文件是通过scaffold_resource生成的,那么它看起来可能是这个样子:
<h1>Listing people</h1>
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<% for person in @people %>
<tr>
<td><%=h person.name %></td>
<td><%=h person.age %></td>
<td><%= link_to 'Show', person_path(person) %></td>
<td><%= link_to 'Edit', edit_person_path(person) %></td>
<td><%= link_to 'Destroy', person_path(person), :confirm => 'Are you sure?', :method => :delete %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New person', new_person_path %>
使用HAML进行改写后它看起来是这个样子:
%h1 Listing people
%table
%tr
%th Name
%th Age
- for person in @people
%tr
%td= person.name
%td= person.age
%td= link_to('Show', person_path(person))
%td= link_to('Edit', edit_person_path(person))
%td= link_to('Destroy', person_path(person), :confirm => 'Are you sure?', :method => :delete)
- end
%br
= link_to('New person', new_person_path)
注意,由于HAML使用缩进来控制HTML的层次,因此前面的空格是不可少的,且必须按2的倍数递增,这是强制的,因为这使模板的层次看起来更为清晰。
这个例子多少有些简单(没有涉及CSS),更详细的用法请参看官方指南(也很简单,一个20分钟左右的小指南,但是很全面,这不矛盾,因为HAML本身就不复杂)。
不过,很多人可能会担心效率问题,因为简单的表现往往意味着复杂的后台处理,事实也的确如此,因为HAML相比RHTML要进行更多的处理,因此 HAML 很难做到比RHTML更快,所以问题的关键就在于你能不能承受由此造成的性能下降,目前最新版本的HAML(1.7)大约只比RHTML慢30%左右,并且HAML的作者Hampton说他们正在努力使HAML的性能在2.0版本中超越RHTML,就让我们拭目以待吧!
简单明了的知识库