2009-10-06 35 views
5

說我有一個東西,以期輔助方法,資源,例如:是否有可能讓Rails中的視圖助手生成Haml縮進HTML?

%p 
    = foo 

系統產生看起來像這樣的HTML源代碼:

module ThingsHelper 
    def foo 
    ret = "" 
    3.times { ret += content_tag(:li, "foo") } 
    content_tag(:ul, ret) 
    end 
end 

那麼,這是在模板中使用

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Foo</title> 
    </head> 
</html> 
<body> 
    <p> 
     <ul><li>foo</li><li>foo</li><li>foo</li></ul> 
    </p> 
</body> 

正如您所看到的,幫助器輸出不會像代碼的其餘部分那樣縮進。任何方式來解決這個問題?

回答

10

試用Haml提供的haml_tag helper method。這在某種程度上就像content_tag,但它輸出正確的縮進HTML。主要區別在於它直接輸出到模板,而不是返回字符串。例如:

module ThingsHelper 
    def foo 
    haml_tag :ul do 
     3.times { haml_tag(:li, "foo") } 
    end 
    end 
end 

(作爲一個方面,它被認爲是非常糟糕的Ruby風格使用非空格縮進的東西)。

+0

工作很好。在http://tumblr.com/xq73f3ypd上以樹形結構集合的格式化程序編寫了一個簡單示例 – 2009-10-07 16:07:40

1

我對此表示懷疑 - 至少不是沒有大量的垃圾。

您的= foo只是打印foo助手返回的內容 - 它不會被haml解析。而且你也不能在你的助手方法中寫haml。

我能想到的最簡單的方法就是在助手中添加文字空白字符(即\n\t)。

您也可以在您的幫助程序中使用require相關的haml類,並在ret上手動調用解析方法,但這可能比值得的更復雜。