1

清潔和因素醜陋的觀點,我想做到以下幾點:HAML,塊和諧音

1)在視圖:

= document_left_container do 
= document_information 

2)在我的幫助:

def document_left_container(&block) 
    render partial: "/document_left_container", locals: { custom_block: block } 
    end 

    def document_information 
    render partial: "document_information" 
    end 

3)局部模板:

對於document_left_container:

.foo 
    = custom_block.call 

對於document_information:

.bar 

4)預期的結果:

<div class='foo'> 
    <div class='bar'> 
    </div> 
</div> 

5)實際結果:

<div class='foo'> 
</div> 
<div class='bar'> 
</div> 

有誰知道我怎麼可能做得到我的東西工作?

由於提前,

+0

是否將'= document_information'改爲' - document_information'(即使用'-'而不是'=')help?我無法準確再現您所看到的內容,但是可以通過此更改生成您的預期輸出。 – matt 2012-07-14 18:49:13

回答

1

以下是我想保持乾燥:

=content_for(:document_information) do 
    .bar 

.foo 
    =yield(:document_information) 

這將產生

<div class='foo'> 
    <div class='bar'> 
    </div> 
</div> 
+0

感謝您的回答。我最終如上所述使用'content_for'來保持全局結構。然而我不明白爲什麼我原來的代碼失敗了...... – apneadiving 2012-07-13 07:42:21

0

我目前的解決辦法是:

助手:

def document_left_container(&block) 
    content_for :document_left_container do 
    block.call 
    end 
    render partial: "/document_left_container" 
end 

部分:

.foo 
    = yield :document_left_container 

休息不變,我真的想保持相同的結構。

仍然好奇地理解爲什麼我原來的代碼失敗。

0

我認爲你原來的代碼失敗,因爲你本質上是調用渲染,然後再次調用渲染。所以你把一些東西推到堆棧上,然後把其他東西推到它上面。如果你這樣做,我認爲它會工作。 (雖然我還沒有測試過。)

def document_left_container(&block) 
    capture_haml do 
    render partial: "/document_left_container", locals: { custom_block: block } 
    end 
end 

def document_information 
    render partial: "document_information" 
end 
+0

不幸的是,它不起作用。無論如何,感謝您的幫助! – apneadiving 2012-07-16 19:45:42