`
hbxiao135
  • 浏览: 108871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Haml 参考大全 Haml教程

阅读更多

Haml是一种用来描述任何XHTML web document的标记语言,它是干净,简单的。而且也不用内嵌代码。Haml的职能就是替代那些内嵌代码的page page templating systems,比如PHP,ERB(Rails的模板系统),ASP。不过, haml避免了直接coding XHTML到模板,因为它实际上是一个xhtml的抽象描述,内部使用一些code来生成动态内容。

它有什么特点呢?
1.    空格标识层次嵌套关系
2.       良好的标签格式
3.       DRY(Don’t repeat yourself)
4.       遵循CSS标准
5.       集成了Ruby代码
6.       用.haml扩展名代替了rails模板(.rhtml)


Haml的使用
Haml的使用有两种方式:
作为Ruby on Rails的插件来使用。
作为一个独立的Ruby module来使用。

Rails 插件方式:
这是使用Haml最常用的方式。当然,安装Haml的方式,就是Rails里常用的插件安装方式了:
    ./script/plugin install http://svn.hamptoncatlin.com/haml/tags/stable
一旦安装好以后,你必须以.haml为扩展名来使用。
你在ERB模板里可以使用的实例变量在Haml里照样可以使用,Helper方法也不例外。比如:
# file: app/controllers/movies_controller.rb
class MoviesController < ApplicationController
    def index
      @title = "Teen Wolf"
    end
  end
# file: app/views/movies/index.haml
  #content
   .title
     %h1= @title
     = link_to 'Home', home_url

上面的haml代码会被编译为:
<div id='content'>
   <div class='title'>
      <h1>Teen Wolf</h1>
      <a href='/'>Home</a>
    </div>
  </div>

Ruby Module方式:
Haml可以完全从rails和ActionView里拿出来单独使用。下下面这样做:
  gem  install  haml

然后用Haml::Engine:
engine = Haml::Engine.new("%p Haml code!")
engine.render #=> "<p>Haml code!</p>\n"

XTML Tags:
下面这些字符会渲染出相应的xhtml tag

%
百分号
符号是一行的开始,紧接着一个元素的名字,然后后面跟一个可选的修饰语(见下例),比如一个空格,或一行文本等,就会被渲染到这个元素里成为其内容
。它会创建一个这样的形式:<element></element>.。举个例子:
  %one
    %two
      %three Hey there
会被编译为:
  <one>
    <two>
      <three>Hey there</three>
    </two>
  </one>
对于任何一个有效的标准元素字符,Haml都会自动的为其生成闭合标签。

{}
括号
内的Ruby hash是用来指名一个元素的属性
。它作为一个ruby hash的字面量,局部变量也可以在其中使用。Hash放在被定义好的标签之后,基本上就和Ruby语法一样,看例子:

  %head{ :name => "doc_head" }
    %script{ 'type' => "text/" + "javascript",
             :src   => "javascripts/script_#{2 + 7}" }
编译后为:
  <head name="doc_head">
    <script src='javascripts/script_9' type='text/javascript'>
    </script>
  </head>


[]
方括号
跟在一个标签定义之后,包含一个Ruby 对象,被用来为这个标签设置class和id属性。这个class的值被设置为这个对象的类名(两个单词用下划线形式表示,而不是驼峰表示方法)并且id的值被设置为对象的类名加上这个对象的id,也是下划线连接
。因为一个对象的id通常是朦胧的实现细节,这是表现model的实例最有用的元素了(这句是不是翻译的太差?)。看例子:
# file: app/controllers/users_controller.rb
  def show
    @user = CrazyUser.find(15)
  end
# file: app/views/users/show.haml
  %div[@user]
    %bar[290]/
    Hello!
转换为:
  <div class="crazy_user" id="crazy_user_15">
    <bar class="fixnum" id="fixnum_581" />
    Hello!
  </div>
这是基于RailsConf Europe 2006 大会上DHH提出的SimpleHelpful语法

/
这个斜线 字符,放在一个tag定义之后,可以让这个标签自我关闭
。例子:
  %br/
  %meta{'http-equiv' => 'Content-Type', :content => 'text/html'}/
转换为:
  <br />
  <meta http-equiv='Content-Type' content='text/html' />
有一些标签(meta, img, link, script, br, and hr tags等)当没有内容的时候会自动关闭。看例子:
  %br
  %meta{'http-equiv' => 'Content-Type', :content => 'text/html'}
转换为:
  <br />
  <meta http-equiv='Content-Type' content='text/html' />

. and #
这两个符号是从CSS里借鉴来的。他们被用来表示一个元素的class和id属性。

看例子:

  %div#things
    %span#rice Chicken Fried
    %p.beans{ :food => 'true' } The magical fruit
    %h1.class.otherclass#id La La La
转换为:

  <div id='things'>
    <span id='rice'>Chicken Fried</span>
    <p class='beans' food='true'>The magical fruit</p>
    <h1 class='class otherclass' id='id'>La La La</h1>
  </div>
注意h1标签。两个点连用,第一个表示class属性,第二个则是用来链接那两个字符的空格。

  #content
    .articles
      .article.title
        Doogie Howser Comes Out
      .article.date
        2006-11-05
      .article.entry
        Neil Patrick Harris would like to dispel any rumors that he is straight
转换为:
  <div id="content">
    <div class="articles">
      <div class="article title">Doogie Howser Comes Out</div>
      <div class="article date">2006-11-05</div>
      <div class="article entry">
        Neil Patrick Harris would like to dispel any rumors that he is straight
      </div>
    </div>
  </div>

Implicit Div Elements (隐藏DIV)
因为Div这个标签经常被用,所以你仅用.and#这两个符号来定义class和id的时候,一个div元素就会被自动的使用
。例如:
  #collection
    .item
      .description What a cool item!
和下面的这个相似:
  %div{:id => collection}
    %div{:class => 'item'}
      %div{:class => 'description'} What a cool item!
都会被转换为:
  <div id='collection'>
    <div class='item'>
      <div class='description'>What a cool item!</div>
    </div>
  </div>
=
等号符号用来插入ruby 代码的值到模板中。

  %p= "hello"
和下面的这种形式不太一样:

  %p
    = "hello"

XHTML Helpers
No Special Character

如果没有这些特定的字符打头的话,返回的只是一个普通的文本,比如下面的Wow this is cool!
  %gee
    %whiz
      Wow this is cool!
转换为:
  <gee>
    <whiz>
      Wow this is cool!
    </whiz>
  </gee>

!!!
当用haml来表示一个XHTML文档 ,你可以通过!!!这个符号来自动生成文档类型和XML prolog
。比如:
  !!! XML
  !!!
  %html
    %head
      %title Myspace
    %body
      %h1 I am the international space station
      %p Sign my guestbook
转换为:
  <?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">
  <html>
    <head>
      <title>Myspace</title>
    </head>
    <body>
      <h1>I am the international space station</h1>
      <p>Sign my guestbook</p>
    </body>
  </html>
你也可以在!!!后面加版本号。比如:
  !!! 1.1
转换为:
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
and

  !!! Strict
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
如果你不想用UTF-8的编码,你也可以指定你想要的编码:
  !!! XML iso-8859-1
转换为:
  <?xml version="1.0" encoding="iso-8859-1" ?>

/
如果这个斜线写在打头的位置,则会注释这行

  %billabong
    / This is the billabong element
    I like billabongs!
转换为:
  <billabong>
    <!-- This is the billabong element -->
    I like billabongs!
  </billabong>

放在代码的上方,则注释整个代码:
  /

    %p This doesn't render...
    %div
      %h1 Because it's commented out!
转换为:

  <!--
    <p>This doesn't render...</p>
    <div>
      <h1>Because it's commented out!</h1>
    </div>
  -->

  /[if IE]
    %a{ :href => 'http://www.mozilla.com/en-US/firefox/' }
      %h1 Get Firefox
转换为:

  <!--[if IE]>
    <a href='http://www.mozilla.com/en-US/firefox/'>
      <h1>Get Firefox</h1>
    </a>
  <![endif]-->

\
反斜杠
符号允许字符串前面的第一个符号作为纯文本使用


  %title
    = @title
    \- MySite
转换为:

  <title>
    MyPage
    - MySite
  </title>

|
管道
符可以允许把输出为一行的内容写成多行。


  %whoo
    %hoo I think this might get |
      pretty long so I should |
      probably make it |
      multiline so it doesn't |
      look awful. |
    %p This is short.
is compiled to:

  <whoo>
    <hoo>
      I think this might get pretty long so I should probably make it multiline so it doesn't look awful.
    </hoo>
  </whoo>

:
冒号
是指定一个过滤器。冒号后面是你要使用的那个过滤器的名字。For example,


  %p
    :markdown
      Textile
      =======

      Hello, *World*
转换为:

  <p>
    <h1>Textile</h1>

    <p>Hello, <em>World</em></p>
  </p>

Haml支持的过滤器定义
plain
ruby
preserve
erb
sass
redcloth
textile
markdown



Ruby evaluators(执行Ruby代码,前面说了)
=
等号
允许执行ruby代码并返回一个值作为显示文本。


  %p
    = ['hi', 'there', 'reader!'].join " "
    = "yo"
编译为:
  <p>
    hi there reader!
    yo
  </p>
你也能使用双等号来更容易的嵌入ruby代码。比如:
  %p
    == 1 + 1 = #{1 + 1}
编译为:
  <p>
    1 + 1 = 2
  </p>
-
横杠
符号,很有性格,可以使文本变为”silent script”:意思是,代码可以执行,但并不输出任何东西。


这里不推荐使用这种扩展,所有的逻辑代码都应该限制在controller,helper或partials里

For example:

  - foo = "hello"
  - foo << " there"
  - foo << " you!"
  %p= foo
转换为:
  <p>
    hello there you!
  </p>
Blocks
Ruby中的块,也不需要明显的去关闭,haml会让它自动关闭。这写都是基于缩进的。千万记住要缩进两个空格。

  - (42...47).each do |i|
    %p= i
  %p See, I can count!
编译为:

  <p>
    42
  </p>
  <p>
    43
  </p>
  <p>
    44
  </p>
  <p>
    45
  </p>
  <p>
    46
  </p>
Another example:

  %p
    - case 2
    - when 1
      = "1!"
    - when 2
      = "2?"
    - when 3
      = "3."
is compiled to:

  <p>
    2?
  </p>
<

-#
相当于一个注释 吧,跟在这个符号后面的文本无法输出。


For example:

%p foo -# This is a comment %p bar

is compiled to:

<p>foo</p> <p>bar</p>

h2>Other Useful Things

Helpers
Haml offers a bunch of helpers that are useful for doing stuff like preserving whitespace, creating nicely indented output for user-defined helpers, and other useful things. The helpers are all documented in the Haml::Helpers and Haml::Helpers::ActionViewExtensions modules.
Haml提供了很多有用的helper方法。比如为用户定义的helper方法保留空格创建漂亮的缩进等其他一些有用的东西。这些helpers方法都在Haml::Helpers和Haml::ActionViewExtensions这两个modules里。


Haml Options
Options can be set by setting the hash Haml::Template.options from environment.rb in Rails, or by passing an options hash to Haml::Engine. Available options are:
可以在Rails的environment.rb文件中通过设置Haml::Template.options的hash来设置Options,或者通过传一个hash到Haml::Engine里来设置。也就是你可以设置如下option来自定义haml,可用的options如下所示:
:suppress_eval
:attr_wrapper
:filename
:filters
:locals

原始出处:http://blackanger.blog.51cto.com/140924/47642

 

分享到:
评论
1 楼 zhaomingyuan7 2014-03-23  
                                                              

相关推荐

    haml-to-php:PHP的haml实现

    请参阅如果您将对haml-to-php.com的支持添加到框架中,我想参考您的工作。 我知道的相关工作 请参阅此处。 最引人注目。 可能也很有趣。 如果您知道更多值得注意的HAML PHP实现,请告诉我 链接 (可能已过时) 捐款 ...

    Go-Amber一个Go编程语言的优雅模板引擎灵感来自HAML和Jade

    完整的官方文档提供了详细的使用指南和API参考,帮助开发者更好地理解和应用Amber。 7. **应用场景** Go-Amber适合于构建Web应用,尤其是那些重视代码整洁度和效率的项目。它也适用于快速原型开发,因为其简洁的...

    ruby on rails 2.2.2 参考手册

    本参考手册是学习Rails 2.2.2的重要资源,特别适合初学者和有一定经验的开发者。它提供了详尽的API文档,帮助开发者深入理解Rails框架中的各个组件和方法。以下是一些关键的知识点: 1. **MVC架构**:Rails的核心...

    PyPI 官网下载 | PyHAML-0.1.5.tar.gz

    2. **文档**:可能包含README文件,提供了库的基本介绍和使用指南,还有可能有其他的文档如API参考或示例代码。 3. **测试**:可能有一个`tests`目录,包含了单元测试用例,用于验证库的功能是否正常工作。 4. **...

    Ruby+Rails+社交+教程

    9. **模板和布局**:使用ERB(嵌入式Ruby)或HAML编写视图,创建用户友好的界面。同时,理解如何设置全局布局以保持一致性。 10. **测试**:Rails强调TDD(测试驱动开发),所以学习Rspec或MiniTest进行单元测试和...

    chicagocamps.org:芝加哥营地

    这对于开发者来说是一个学习和参考的好资源,特别是对于那些对Haml或Web开发感兴趣的人来说。同时,对于用户而言,如果想要了解更多关于芝加哥营地活动的详细信息,这个网站无疑是一个宝贵的资源。

    Agile Web Development with Rails,Fourth Edition 第四版

    总而言之,《敏捷Web开发与Rails》第四版是一本全面覆盖Rails 3的教程,它不仅教授了Rails框架的基础知识,还深入探讨了敏捷开发的最佳实践,对于任何想要掌握或提升Rails技能的人来说,都是一本不可或缺的参考资料...

    rails-tutorial-源码.rar

    本教程源码主要涵盖了Rails开发的基础到进阶的知识点,对于学习和理解Rails框架的运作机制具有极高的参考价值。 1. **Rails框架基础** - MVC架构:Rails的核心在于MVC设计模式,它将应用程序分为模型、视图和控制...

    Rails 学习资料

    "Rails学习"意味着它是针对Rails框架的学习材料,而“文档”和“资料”则表明这些内容可能是详细的教程、API参考或者案例研究。"工具"可能指的是与Rails开发相关的辅助软件,如数据库管理工具、代码编辑器配置、Gem...

    SMILEdelivered

    您可以使用工具在几分钟内构建此应用程序,选择 Bootstrap 或 Foundation 前端框架,以及许多其他选项,例如 Haml 或 Slim。 还有一篇关于的有用文章,比较了 CanCan 和 Pundit gem,并查看了简单的基于角色的授权...

    ciao-app-dashboard

    您可以使用工具在几分钟内构建此应用程序,选择 Bootstrap 或 Foundation 前端框架,以及许多其他选项,例如 Haml 或 Slim。 还有一篇关于的有用文章,比较了 CanCan 和 Pundit gem,并查看了简单的基于角色的授权...

    ruby学习的源码

    - "附赠:超多精品源码.htm":可能包含其他开发者分享的代码示例,可作为学习参考。 - "codes":可能是一些Ruby或Rails的代码片段,可以帮助理解语言特性和实践技巧。 通过深入学习这些内容,初学者不仅可以掌握...

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版

    总的来说,《Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版》是一本全面而深入的教程,适合初学者入门,也对有经验的Rails开发者具有参考价值。通过阅读此书,开发者不仅可以掌握Ruby on Rails的技术细节,还能...

    mytestrails

    这本书是学习 Rails 的经典参考资料,涵盖了从基础到高级的许多主题。 标签 "ruby" 明确了这个话题与 Ruby 语言紧密相关,而 Ruby 语言是 Rails 框架的基础。Ruby 以其简洁、易读的语法和对开发者友好的特性闻名,...

    Agile Web Development with Rails

    此外,书中还会介绍如何利用ActiveRecord进行数据库操作,使用 erb 或者 Haml 进行模板渲染,以及如何集成JavaScript和CSS来增强用户体验。 敏捷开发是一种强调适应变化、迭代和客户反馈的软件开发方法论。在《敏捷...

    rail api文档

    文档将深入解析模板语言(ERB或Haml)、局部变量、辅助方法和布局的使用。 5. **Rails路由**:Rails的路由系统负责将URL映射到控制器行动上。文档会介绍配置路由的基本语法、资源路由和命名路由。 6. **Active ...

    使用 rails进行敏捷开发(第三版)

    7. **视图与模板引擎**:介绍ERB、Haml、Slim等模板语言,以及如何在视图中渲染数据。 8. **测试驱动开发(TDD)**:教授如何编写RSpec或Test::Unit测试,确保代码质量并遵循敏捷开发原则。 9. **ActiveSupport库**...

    railscasts-episodes:尚未维护。 请参阅自述文件

    然而,它仍然是学习 Rails 基础和进阶技巧的重要历史参考资料。 描述中提到,"该存储库不再维护",这意味着官方已停止对 railscasts-episodes 的更新和维护,转而将每个单独的情节(episode)分散到各自的存储库中...

    Rails.Recipes.Rails.3rd和源码

    4. **视图**:涵盖模板语言ERB和Haml的使用,以及如何利用辅助方法和布局来美化界面。 5. **模型**:讨论ActiveRecord的查询接口,关联关系,以及如何进行数据验证。 6. **测试**:讲解RSpec和Cucumber等测试工具的...

Global site tag (gtag.js) - Google Analytics