2015-09-16 18 views
0

我的代碼有點像這樣:如何做兩次在不同的分支機構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> 

似乎文本被插回到proc被定義的地方,而不是它被調用的地方。我沒有足夠的理解哈姆的內部知道爲什麼會發生這種情況,我關心的是:如何在保持代碼乾燥的情況下獲得所需的輸出?

注:在我的實際項目equivelent到say_hi PROC要長得多,越來越複雜,因此簡單地重複了兩遍會非常難看。以上只是最簡單的情況,如果沒有明顯的解決方案,會導致此問題。

回答

1

您需要使用capture_haml,否則Haml的將直接寫入到輸出時,PROC叫:

- say_hi = proc do |to_who| 
    - capture_haml do 
    .himessage 
     Hi 
     = to_who 
.foo 
    .bar 
    = say_hi.call "bob" 
    = say_hi.call "joe" 
+0

我剛剛得到開始侵入中的冒險HAML的代碼,將已經導致這個確切的方法是由我寫的。你及時回答我不要重新發明輪子,謝謝! – Shelvacu

相關問題