什么是Template样板呢?我们知道伺服器最终提供给浏览器的格式是HTML文件,而Template样板就是动态产生HTML的方式。
相对的说,我们用静态HTML来称呼不经过程式产生的HTM文件
Rails预设用来产生Template的方式是Embedded Ruby(ERb),如果你曾经使用过PHP、JSP或ASP,那么你会非常熟悉这种内嵌程式码的风格,这是一种最为直觉且容易学习的方法。例如以下是一小段嵌入目前时间的ERb,中间<%= %>
的部份便是Ruby程式:
<h1><%= Time.now.to_s %></h1>
Rails的Template档案位置和名称也是有玄机的,例如app/views/welcome/index.html.erb来说,welcome目录是它的Controller名称,档案第一段index是它的Action名称,附档名则是用来指定要用什么方式来产生什么格式的文件:index.html.erb表示用ERb产生HTML格式的文件。会有这样惯例的原因,你可能已经猜到,那就是使用ERb不代表一定就是用来产生HTML。用什么Template引擎(在Rails中又叫作Template Handler )产生文件,和文件的Format格式是两回事情。所以ERb其实可以用来产生任何文字档格式,例如CSV、XML、JavaScript等等。
虽然可以,但ERb并不是产生XML的最好方式,通常在我们会用Builder来产生XML,例如一个叫做show.xml.builder的档案:
people do |p|
p.person "test"
end
就会产生以下的XML:
<people>
<person>test<person>
</people>
以下是常见的样板引擎与格式组合:
格式 | 引擎 |
---|---|
html、xhtml | erb |
js | erb |
xml、rss、atom | builder |
Rails预设只有内建ERb和Builder这两套样板引擎,但要扩充非常容易。例如在Rails社群中,也很流行用HAML这套样板引擎来取代ERb。HAML是一套利用缩排技术简化HTML撰写的格式,例如:
#content
.box
test
就会产生以下的HTML:
<div id="content">
<div class="box">
test
</div>
</div>
要安装使用,只需要在Gemfile档案中加上gem "haml-rails"
然后bundle install
即可。不过相较于ERb,使用HAML虽然可以更为有效率地撰写HTML样板,但是会需要考量团队中的网页设计师是否能够配合使用。