HAML学习
来源:http://ningandjiao.iteye.com/blog/1772845
一个技术能够风靡,一定是有它的原因的,在熟悉之前,我们没有资格去对它做任何的判断。
Haml 是一种简洁优美的模板语言,使用它之后可以大大缩减模板代码,减少冗余,提高可读性。并且Haml是一种完备的模板语言,没有牺牲当前模板语言的任何特性。
Haml的使用通常有两种方式:
一是作为Ruby on Rails的插件来使用;
二是作为一个独立的Ruby module来使用。
因为Haml可以提升我们编写HTML文件的速度,同时避免一些不必要的语法错误,因此还可以使用Haml作为一个加速HTML编写的工具,当然前提条件是有一个能够快速的把HAML编译成HTML的工具。
Haml的语法 
从Html到Haml
Html文件如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>订餐</title>
<link rel="stylesheet" href="lib/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.css"/> <script src="lib/jquery.js"></script>
<script src="lib/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js"></script> <script src='data/foods.json' type='text/javascript'></script>
<script src='data/restaurants.json' type='text/javascript'></script>
<script src='data/users.json' type='text/javascript'></script>
<script src="js/application.js"></script>
<link rel="stylesheet" href="css/application.css" type="text/css">
</head>
<body>
<div data-role="page" id="main">
<div data-role="header">
<h1>订餐</h1>
</div>
<!-- /header --> <div data-role="content">
<a href="#order" data-role="button">帮订餐</a>
<a href="#orders" data-role="button">看订单</a>
</div>
<!-- /content -->
</div> <div data-role="page" id="order">
<div data-role="header">
<a href="#main" data-icon="back">Back</a>
<h1>订餐</h1>
</div>
<!-- /header --> <div data-role="content">
<label>人:</label>
<input type="text" name="name" id="user" value="" readonly/>
<a href="#peoples" data-role="button">选人</a> <label>餐厅:</label>
<input type="text" name="name" id="restaurant" value="" readonly/>
<a href="#restaurants" data-role="button">选餐厅</a> <label>套餐:</label>
<input type="text" name="name" id="food" value="" readonly/>
<a href="#foods" data-role="button" id="choose-food">选套餐</a>
<a id="confirm" href="#" data-role="button">确定</a>
</div>
<!-- /content -->
</div> <div data-role="page" data-add-back-btn="true" id="orders">
<div data-role="header">
<h1>订单显示</h1>
</div>
<ul id="orderList" data-role="listview" data-theme="c"/>
</div> <div data-role="page" data-add-back-btn="true" id="peoples">
<div data-role="header">
<h1>选人</h1>
</div>
<ul id="userList" data-role="listview" data-theme="c"/>
</div> <div data-role="page" data-add-back-btn="true" id="restaurants">
<div data-role="header">
<h1>选餐厅</h1>
</div>
<ul id="restaurantList" data-role="listview" data-theme="c"/>
</div> <div data-role="page" data-add-back-btn="true" id="foods">
<div data-role="header">
<h1>选套餐</h1>
</div>
<ul id="foodList" data-role="listview" data-theme="c"/>
</div>
</body>
</body>
</html>
改写后的HAML文件如下:
!!! Mobile
%html
%head
%meta{:charset=>"utf-8"}
%meta{:name=>"viewport", :content=>"width=device-width, initial-scale=1"}
%title 订餐
%link{:rel=>'stylesheet', :href=>'lib/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.css'}
%link{:rel=>'stylesheet', :href=>'css/application.css'}
%script{:src=>'lib/jquery.js', :type=>'text/javascript'}
%script{:src=>'lib/jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js', :type=>'text/javascript'}
%script{:src=>'data/foods.json', :type=>'text/javascript'}
%script{:src=>'data/restaurants.json', :type=>'text/javascript'}
%script{:src=>'data/users.json', :type=>'text/javascript'}
%script{:src=>'js/application.js', :type=>'text/javascript'} %body
%div#main{:data => {:role=>'page'}}
%div{:data=> {:role=>'header'}}
%h1 订餐
%div{:data=> {:role=>'content'}}
%a{:href=>'#order', :data=> {:role=>'button'}} 帮订餐
%a{:href=>'#orders', :data=> {:role=>'button'}} 看订单 %div#order{:data=> {:role=>'page'}}
%div{:data=> {:role=>'header'}}
%a{:href=>'#main', :data=> {:icon=>'back'}} Back
%h1 订餐
%div{:data=> {:role=>'content'}}
%label 人:
%input#user{:type=>'text',:name=>'name',:readonly=>'true'}
%a{:href=>'#peoples', :data=> {:role=>'button'}} 选人 %label 餐厅:
%input#restaurant{:type=>'text',:name=>'name',:readonly=>'true'}
%a{:href=>'#restaurants', :data=> {:role=>'button'}} 选餐厅 %label 套餐:
%input#food{:type=>'text',:name=>'name',:readonly=>'true'}
%a{:href=>'#foods', :data=> {:role=>'button'}} 选人 %a#confirm{:data=> {:role=>'button'}} 确定 %div#orders{:data=> {:role=>'page', :add_back_btn=>'true'}}
%div{:data=> {:role=>'header'}}
%h1 订单显示
%ul#orderList{:data=> {:role=>'listview'},:data=> {:theme=>'c'}} %div#peoples{:data=> {:role=>'page',:add_back_btn=>'true'}}
%div{:data=> {:role=>'header'}}
%h1 选人
%ul#userList{:data=> {:role=>'listview'},:data=> {:theme=>'c'}} %div#restaurants{:data=> {:role=>'page',:add_back_btn=>'true'}}
%div{:data=> {:role=>'header'}}
%h1 选餐厅
%ul#restaurantList{:data=> {:role=>'listview',:theme=>'c'}} %div#foods{:data=> {:role=>'page', :add_back_btn=>'true'}}
%div{:data=> {:role=>'header'}}
%h1 选套餐
%ul#foodList{:data=> {:role=>'listview',:theme=>'c'}}
Haml的确让代码变得更短了,对于编写速度的提升目前还没有感受,因为,对于非常熟悉HTML语法的程序员来说,Haml的一些习惯还是会让我们填不少的坑,但是一个工具一定是在你熟练使用的时候才能提升你的效率,如果,对于Haml和Html5同样熟悉的开发人员,Haml的确是更有效率的工具。
HAML学习的更多相关文章
- emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点
摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...
- Node.js 学习资源
这篇文章编译整理自Stack Overflow的一个如何开始学习Node.js的Wiki帖,这份资源列表在SO上面浏览接近60万次,数千个收藏和顶.特意整理发布到这里,其中添加了部分中文参考资料. 学 ...
- Github上PHP资源汇总大全,php学习的好资料
Github上PHP资源汇总大全,php学习的好资料 国外程序员ziadoz 在Github上收集整理了PHP的各种资源,内容包括模板.框架.数据库.安全等方面的库和工具.汇总了各种PHP资源,供各位 ...
- 转:Java学习路线图
作者: nuanyangyang 标 题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内 [以下肯定是不完整的列表, ...
- haml、sass简单的解释
1. Haml 全名为 HTML Abstract Markup Language,主要就是让开发者能够使用缩排的方式撰写 HTML,做到永不忘记关 Tag 的效果. 例如:%h1= "He ...
- sass的学习笔记
sass初学入门笔记(一) 我本身是个新手,一边学sass一边记下的笔记,可能有点罗嗦,但是复习起来的话还是比较全面直观的.当然,最重要的还是去实践,实践得真理 其它 CSS 预处理器语言: CSS ...
- [转]SCSS 和 SASS 和 HAML 和CoffeeScript
Asset Pipeline 提供了内建直接使用 Sass 撰写 CSS 的功能. 你也许会生出这样的疑惑:什么是 Sass? Why should I care? Sass (Syntactical ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
随机推荐
- ueditor上传图片到七牛云存储(form api,java)
转:http://my.oschina.net/duoduo3369/blog/174655 ueditor上传图片到七牛云存储 ueditor结合七牛传图片 七牛的试炼 开发前的准备与注意事项说明 ...
- PotPlayer播放器——最强大的播放器 - imsoft.cnblogs
PotPlayer下载:链接 http://pan.baidu.com/s/17vgMM 密码: 8buc PotPlayer关联图标修改方法:打开安装目录替换目录下的PotIcons.dll文件即可 ...
- SqlServer 杂记 不断补充中
1.OPTION (MAXRECURSION 25) :最大允许递归的次数.默认最大CTE递归只有100次,而你要求插入10年的数据,需要递归3000多次,所以要使用option (MAXRECURS ...
- [转]国内良心DNS汇集
http://www.changbizi.net/archives/664.html 长鼻子实验室 湖北电信的DNS服务器真是烂到掉渣,曾经有一年我给他们的售后打电话到人家都记住我的手机号码,但是DN ...
- ajax 异步调用把返回值赋给一个全局变量的用法,最主要的就是把async属性改为 false,
<script> $(document).ready(function () { <% string dqsj = System.DateTime.Now.ToString(&quo ...
- Codeforces Round #303 (Div. 2) C dp 贪心
C. Woodcutters time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- VGA DVI HDMI区别
VGA,DVI,HDMI是目前常用的3种不同显示接口的名称.在树莓派的边缘既有HDMI的接口,也有RCA的接口,而显示器上也是既有DVI,又有VGA.上个月买连接线,没有仔细检查买了一根HDMI对VG ...
- kafka的推和拉的问题
之前学习过这一问题,但是面试又被问道了.再次记录下 推还是拉? Kafka最初考虑的问题是,customer应该从brokes拉取消息还是brokers将消息推送到consumer,也就是pull还p ...
- codeforces 725/C
Hidden Word time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...
- linux下常用文件传输命令 (转)
因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...