haml两个空格问题

时间:2012-05-26 03:10:15

标签: haml

使用haml时遇到以下问题。

首先,我想检查一个变量,然后再渲染其他变量,但它仍然应该嵌套。

让我解释一下

代码:

.a
  .b

gives:   <div class=a><div class=b></div></div>

当我使用haml if else时,我不能在.a:

中嵌套.b
- if id == 3
  .a{style => 'xxx'}
- else
  .a{style => 'yyy'}

    .b <-- 2 spaces, otherwise it fails. but 2 spaces are causing the following issue:

问题是,因为haml没有结束,所以我不知道如何将.b放在.a div中,在两种情况下(如果id == 3,或者其他)。

作为一个真实的例子:

- if home != nil
  .home
    home.id
- else
  .home
    empty
- end   <--- can't use
  - if room != nil <-- without end, this will be executed only if home == nil but I wan't this to be executed always
    room.id
  - else
    empty

因为haml doens不支持-end,我无法使用它。如果我不使用它,如果我开始查看房间的值,haml会自动关闭div,因为它们在同一行:)

将变量与nil进行比较的示例,或仅在变量为nil时执行某些操作的示例只是一个示例。我正在寻找一种解决方案来解决这种问题,并在其他方面进行缩进,因此它适用于整个声明。

有类似的问题:HAML: Indenting if/else statements with common content

所以,在你的情况下,你会这样做:

.a{ :style => id == 3 ? 'xxx' : 'yyy' }
  .b

编辑: 如果是if... elsif... elsif...,您可以编写自己的帮助程序:

.a{ :style => select_style(variable) }
  .b

#helper method
def select_style(val)
  case val
  when "3"
    "xxx"
  when "4"
    "yyy"
  else
  "zzz"
  end
end

当然你可以用haml编写它,但它会很难看:

- if id == "3" then val="xxx"
- elsif id == "4" then val="yyy"
- else val="zzz"
.a { :style => val }
 .b

HAML有其优点,但它是一个缺点之一。

编辑

或者你可以发疯并且喜欢:

.a{:style => if var == "3" then "xxx" elsif var == "4" then "yyy" else "zzz" end}

2 个答案:

答案 0 :(得分:2)

你也可以试试这个:

- if contition
  - attrs = { class: '..', id: '..' }
- else
  - attrs = { style: '...' }

.a{attrs}
  .b

答案 1 :(得分:1)

有类似的问题:HAML: Indenting if/else statements with common content

所以,在你的情况下,你会这样做:

.a{ :style => id == 3 ? 'xxx' : 'yyy' }
  .b

编辑: 如果是if... elsif... elsif...,您可以编写自己的帮助程序:

.a{ :style => select_style(variable) }
  .b

#helper method
def select_style(val)
  case val
  when "3"
    "xxx"
  when "4"
    "yyy"
  else
  "zzz"
  end
end

当然你可以用haml编写它,但它会很难看:

- if id == "3" then val="xxx"
- elsif id == "4" then val="yyy"
- else val="zzz"
.a { :style => val }
 .b

HAML有其优点,但它是一个缺点之一。

编辑

或者你可以发疯并且喜欢:

.a{:style => if var == "3" then "xxx" elsif var == "4" then "yyy" else "zzz" end}