文/董彬
引言
Haml 是一种简洁优美的模板语言,可以应用于Ruby on Rails、 PHP等Web开发平台,可以大大缩减模板代码,减少冗余,提高可读性。并且Haml是一种完备的模板语言,没有牺牲当前模板语言的任何特性。Haml由 Hampton Catlin发明并且开发了Ruby on Rails上的实现。本文将以Ruby on Rails中的Haml实现为例,帮助你了解Haml的基本语法和常用特性,让你领略到Haml带来的高效生产。
缩进嵌套
当嵌套结构变得复杂时,HTML代码一方面容易忘记添加结束标签,另一方面嵌套结构难以读懂。Haml中不需要结束标签,因为它借鉴了Python的语法,强制使用两个空白字符的缩进来表示代码的嵌套结构,既提高了代码的可读性,又避免了对结束标签的依赖。
%ul
%li Salt
%li Pepper
等价于
<ul>
<li>Salt</li>
<li>Pepper</li>
</ul>
自关闭标签用来关闭:
%br/
等价于:
<br />
Haml的缩进语法优点是:
1. Haml的强制缩进相当于从语言级别规定了代码的缩进规范,违反了这种规范的“灵活性”可以被看成是邪恶的£¬£¬没有缩进或者缩进乱七八糟的嵌套标签是这种灵活性的代价。Haml这种缩进的约束实际上让程序员从不同的缩进风格中解脱出来,关注更重要的事情。
2. 结束标签自标签语言诞生起就是一种冗余,IDE对于标签语言最常用的支持也就是结束标签的自动补全和嵌套标签的自动缩进。Haml致力于消除冗余。
HTML 属性
Haml用{}来设置HTML属性,{}中的内容被当作是Ruby Hash来解释,所以任何Ruby代码都可以被直接调用。例如:
%p{:class => cycle("odd", "even")} Hello
等价于
<p class = '<%= cycle("odd", "even")%>' > Hello </p>
重构重复代码时,往往要借助Helper方法。你也可以把一些HTML属性封装成Helper 方法,然后直接引用:
module ApplicationHelper
def image_src
{:src => 'hello.jpg'}
end
end
%img{image_src}/
被解释成:
<image src='hello.jpg' />
你也可以继续添加其他属性:
%img{image_src, :class => 'nice'}
CSS风格的id 和 class 属性
一个结构良好的HTML中,最常用的属性毫无疑问是 id 和 class。Haml借鉴了CSS的语法,简化了这两个属性的编写。基本的语法结构是:
%tagname#id.class
例如
%p#foo Hello
被解释成:
<p id='foo'> Hello </p>
如果你使用div标签,连tagname都可以省略。比如一个id属性为foo的div标签:
#foo Hello!
被解释成
<div id='foo'>Hello!</div>
同理
.nice Hello
被解释成
<div class='nice'> Hello </div>
也可以添加多个 class :
#foo.nice.light
插入代码
相对于RHTML,Haml的代码插入方式简洁得多。对于需要直接输出的代码,
Haml用 = 来代替 <%= ...%> 。比如:
%p
1 + 2 =
= 1 + 2
被解释成:
<p>
1 + 2 = 3
<p>
对于非输出的代码,用 - 符号来插入。不同于一般Ruby代码的是,就像Haml处理HTML标签一样,Haml中的Ruby代码块不需要关闭。比如:
- (1..3).each do |i|
%p= i
被解释成:
<p>
1
</p>
<p>
2
</p>
声明文档类型
XHTML的声明方式以啰唆而著称:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
如果你厌倦了每次Copy and Paste,可以尝试一下Haml的方式:
!!! XML
!!!
或者你喜欢 XHTML 1.1,就用:
!!! 1.1
来代替:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">结束语
笔者在经历过的大部分Ruby on Rails项目中使用了Haml,相对于RHTML削减了三分之一乃至一半的表示层代码量,并且提高了代码的可维护性。Haml简单易学,即使是页面设计人员也能够很快掌握,技术迁移成本很小。如果本文让你产生了对Haml的兴趣,不要犹豫,在项目中大胆的尝试吧。 注释:
1:http://haml.hamptoncatlin.com/
2:http://hamptoncatlin.com/
作者简介:
董彬, FreeWheel Inc. 的工程师。毕业于哈工大计算机系,有两年的Rails开发经验,爱好围棋和户外运动,潜心于Ruby on Rails,极限编程,BDD等领域。
补充:Haml的两个有用命令
将html文件转换为haml文件
$ html2haml index.html > output.haml
反之,haml转为html
$ haml index.haml > output.html
分享到:
相关推荐
PHP实现的HAML模板语言类库,感兴趣的朋友们可以下载下来,用到自己的项目中。
Haml是一个HTML的模板引擎
PHP实现的HAML模板语言类库
哈姆 Haml是HTML的模板引擎。 通过消除冗余,反映文档所表示的基础结构以及提供既强大又易于理解的优雅语法,它旨在使编写HTML文档变得更加轻松愉快。基本用法Haml可以从命令行使用,也可以作为Ruby Web框架的一部分...
这是用于解析模板的库。 您可以在上获得Haml-rs。 这样做的目的是产生与Ruby 产生HTML相同HTML。 用法 要将haml-rs包含在您的项目中,请在Cargo.toml中添加以下内容: [dependencies] hamlrs = "0.4.2" 然后将以下...
CakePHP 2.x的模板引擎。 基于 ,这是PHP的HAML实现。 安装 将插件包含在您的作曲家文件中: { " require " : { " tiutalk/haml " : " dev-master " } } 该软件包具有Composer依赖性,请不要忘记要求autoload...
HamlPy, 像模板一样的HAML变换器在 Django 模板中的应用 HamlPy对于希望使用像syntax语法的的开发者来说,HamlPy ( 发音"Haml是一种工具。 HamlPy本身不是模板引擎,只是一个编译器,它将HamlPy文件转换成 Django ...
法姆 Haml模板语言的更快实现。安装将此行添加到您的应用程序的Gemfile中: gem 'faml' 然后执行: $ bundle或将其自己安装为: $ gem install faml用法您可以通过Faml::Engine.options设置几个选项。 # Render in ...
支持以下模板语言: :是Java / Scala的Mustache模板语言:Haml / Scaml模板语言的翡翠风格 :提供Haml样式模板语言 :提供JSP,Erb和Velocity样式模板语言在Scaml和SSP中,所有表达式都是类型安全的,并在编辑/...
用于Webpack的Ruby Haml加载程序 将Haml文件作为模块导入Webpack项目中。 返回渲染的模板。 这很慢。 它是为临时使用而创建的,直到转换为Jade。 此自述文件基于自述文件。 设置 添加到您的webpack配置模块....
Haml Coffee模板 Haml Coffee是一个JavaScript模板解决方案,它使用作为标记,了解内联并生成呈现为HTMLJavaScript函数。 它可以在使用 , , , 等的客户端JavaScript应用程序中使用,也可以在框架的服务器端使用...
Amber一个Go编程语言的优雅模板引擎,灵感来自 HAML 和Jade
使用来渲染带有 javascript/coffeescript 和 haml 的 haml 模板。如何使用它? gem 包括 、IE 的 、和 。 您不必单独下载它。 要使用此 gem,您需要执行以下操作: 在Gemfile ,添加以下行。 gem "cshaml-sprockets...
NULL 博文链接:https://lzqustc.iteye.com/blog/311019
前端项目-clientside-haml-js,Haml compiler for client side javascript and coffeescript view templates
NULL 博文链接:https://hlee.iteye.com/blog/602211
概述龙舌兰酒基本上是用于JSON生成的HAML。 如今,在开发具有丰富用户界面的Web应用程序时,Rails后端几乎需要的所有内容都是JSON格式的数据。 几乎总是,当您必须创建一组不明显的数据时,您的控制器变得笨拙而丑陋...
编写类似于ruby的haml实现的代码 在错误的标签嵌套上失败,例如table> td> tr 图书馆支持 请参阅如果您将对haml-to-php.com的支持添加到框架中,我想参考您的工作。 我知道的相关工作 请参阅此处。 最引人注目。 ...
SemanticWP Twig+HAML 模板 这个库使在 WordPress 主题中使用语法的模板变得容易。 快速开始 将semanticwp/twig-haml-templating到您的composer.json : [...] "require" : { [...], "semanticwp/twig-haml-...
Codeigniter-HAML 将HAML与Codeigniter一起使用 作者:Beeksi Waais许可:MIT许可 安装 将文件添加到其相应的文件夹 如果尚未将文件夹cache设为可写状态,则使其可写。 您完成了! 用法 在您的views文件夹中创建一...