我在HAML代码中需要这种结构:
- if something1
%div.a
- elsif something2
%div.b
- elsif something3
%div.c
- else
%div.d
%div another content
我希望我得到类似的东西:
<div class="a|b|c|d">
<div>another content</div>
</div>
但事实上我得到了
<div class="a|b|c|d"></div>
<div>another content</div>
如果需要,我必须如何更新我的代码:
另一个内容
答案 0 :(得分:10)
@ Ingenu的辅助方法看起来更聪明,但如果你不介意它更快更脏,你可以这样做:
- if something1
-divclass = 'a'
- elsif something2
-divclass = 'b'
- elsif something3
-divclass = 'c'
- else
-divclass = 'd'
%div{:class => divclass}
%div another content
答案 1 :(得分:8)
我认为你应该创建一个帮助方法:
%div{:class => helper_method(useful_parameters)}
实现这一目标的真正难看的方法是使用三元运算符(condition ? true_case : false_case)
,这听起来不是一个很好的解决方案,因为您选择了haml并且想要让代码库干净。
答案 2 :(得分:0)
您可以使用此模块扩展if条件,然后使用smalltalk-style条件
module IfTrue
def ifTrue &block
yield if self
slf=self
o = Object.new
def o.elseIf val, &block
yield if !slf && val
end
end
end
现在你可以编写这样的代码:
condition.extend(IfTrue).ifTrue{
do_stuff
}elseIf(condition2){
doOtherStuff
}
或者,如果你是一个顽皮的猴子修补师; - ):
Object.include IfTrue
condition.ifTrue{
do_stuff
}elseIf(condition2){
doOtherStuff
}
如果你想链接多个,如果你不得不通过某种方式调整elsif定义来调整这段代码