如何在 haml 的不同分支中执行两次操作
How to do something twice in different branches in haml
我的代码有点像这样:
- say_hi = proc do |to_who|
.himessage
Hi
= to_who
.foo
.bar
= say_hi.call "bob"
= say_hi.call "joe"
我想要的输出是:
<div class='foo'>
<div class='bar'>
<div class='himessage'>
Hi
bob
</div>
</div>
<div class='himessage'>
Hi
joe
</div>
</div>
相反,我得到:
<div class='himessage'>
Hi
bob
</div>
<div class='himessage'>
Hi
joe
</div>
<div class='foo'>
<div class='bar'>
2
</div>
1
</div>
似乎文本被插入到定义过程的位置,而不是被调用的位置。我对 haml 的内部结构没有足够的了解,不知道为什么会这样,我关心的是:如何在保持代码干燥的同时获得所需的输出?
注意:在我的实际项目中,与 say_hi
过程等效的过程要长得多且复杂得多,因此简单地重复两次会非常难看。以上只是最简单的情况,没有明显的解决方案就会导致这个问题。
需要使用capture_haml
,否则调用proc时Haml会直接写入输出:
- say_hi = proc do |to_who|
- capture_haml do
.himessage
Hi
= to_who
.foo
.bar
= say_hi.call "bob"
= say_hi.call "joe"
我的代码有点像这样:
- say_hi = proc do |to_who|
.himessage
Hi
= to_who
.foo
.bar
= say_hi.call "bob"
= say_hi.call "joe"
我想要的输出是:
<div class='foo'>
<div class='bar'>
<div class='himessage'>
Hi
bob
</div>
</div>
<div class='himessage'>
Hi
joe
</div>
</div>
相反,我得到:
<div class='himessage'>
Hi
bob
</div>
<div class='himessage'>
Hi
joe
</div>
<div class='foo'>
<div class='bar'>
2
</div>
1
</div>
似乎文本被插入到定义过程的位置,而不是被调用的位置。我对 haml 的内部结构没有足够的了解,不知道为什么会这样,我关心的是:如何在保持代码干燥的同时获得所需的输出?
注意:在我的实际项目中,与 say_hi
过程等效的过程要长得多且复杂得多,因此简单地重复两次会非常难看。以上只是最简单的情况,没有明显的解决方案就会导致这个问题。
需要使用capture_haml
,否则调用proc时Haml会直接写入输出:
- say_hi = proc do |to_who|
- capture_haml do
.himessage
Hi
= to_who
.foo
.bar
= say_hi.call "bob"
= say_hi.call "joe"