理解Haml Indenting

时间:2017-01-18 02:54:13

标签: ruby-on-rails ruby haml

有人可以帮助我理解如何正确地缩进haml代码吗

.wrapper_with_padding
#docs.clearfix
 - unless @docs.blank
  - @docs.each do |doc|
   %a{ href: (url_for [doc])}
     .doc
     %p.title= doc.title
     %p.date= time_ago_in_words(doc.created_at)
     %p.content= truncate(doc.content, length:50)

  - else
 %h2 Create Doc!
 %p Start Creating Documents and Organizing your life!
 %button= link_to "Create Doc", new_doc_path

2 个答案:

答案 0 :(得分:3)

如果您发布了预期的HTML,会更容易。这是一种可能性:

- docs = %w[google.com yahoo.com apple.com]

.wrapper_with_padding
  #docs.clearfix
  - unless docs.empty?
    - docs.each do |doc|
      %a{ href: (doc) } link text
      .doc
        %p.title= "some title"
        %p.date=  "some date"
        %p.content= "some content"

  - else
    %h2 Create Doc!
    %p Start Creating Documents and Organizing your life!
    %button{href: "http://www.example.com"} Create Doc

输出:

<div class='wrapper_with_padding'>
  <div class='clearfix' id='docs'></div>
  <a href='google.com'>link text</a>
  <div class='doc'>
    <p class='title'>some title</p>
    <p class='date'>some date</p>
    <p class='content'>some content</p>
  </div>
  <a href='yahoo.com'>link text</a>
  <div class='doc'>
    <p class='title'>some title</p>
    <p class='date'>some date</p>
    <p class='content'>some content</p>
  </div>
  <a href='apple.com'>link text</a>
  <div class='doc'>
    <p class='title'>some title</p>
    <p class='date'>some date</p>
    <p class='content'>some content</p>
  </div>
</div>

如果docs数组为空:

<div class='wrapper_with_padding'>
  <div class='clearfix' id='docs'></div>
  <h2>Create Doc!</h2>
  <p>Start Creating Documents and Organizing your life!</p>
  <button href='http://www.example.com'>Create Doc</button>
</div>

根据haml docs

  

Ruby Blocks

     

Ruby块,如XHTML标签,不需要显式关闭   Haml的。相反,它们会根据缩进自动关闭。一个   每当Ruby之后的缩进增加时块就会开始   评估命令。它在压痕减少时结束(只要   它不是else子句或类似的东西)。

因此,要在if / unless语句之后在ruby代码中启动块,您需要从-代码指示符缩进。并且要在each()语句之后启动另一个块,再次必须从每个()行的-代码指示符缩进。完成块后,您只需返回到启动块的-代码指示器的级别。

创建元素的haml行查找以查看前一个haml行创建元素的位置。如果当前haml行从前一个haml行缩进,那么当前元素将成为前一个元素的子元素 - 缩进的数量无关紧要。例如,<a> haml需要在我的示例中缩进三次才能由each()块控制。并且因为<a> haml从#doc.clearfix haml中缩进了一些,这会创建<div>,这意味着<a>标记将是<div>标记的子标记int a = -500; a = a << 1; a = (unsigned int)a >> 1; //printf("%d",a) gives me "2147483148" }。

答案 1 :(得分:2)

Haml的主要目标(与许多其他模板一样)是为了减少混乱;所有这些括号和括号以及诸如此类的东西都被完全删除了。但是当事情开始和结束时你仍需要告诉它(计算机很聪明,它们并不那么聪明),所以我们使用缩进代替。任何时候你在标签内写一些东西,缩进它!当你完成那个标签时,unindent!

例如:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

变为

<p>This is a <small>very small</small> paragraph</p>Yay!

每次打开标签时,下面的行都会缩进,只要您关闭该标签,我们就会向后移动到左侧。与%p This is a %small very small paragraph Yay! s相同的事情!