2009-10-06 12 views
5

Railsのビューヘルパーによって生成されたHTMLをHamlにインデントさせることは可能ですか?

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

この、そして、テンプレートで使用されています:このようなルックスを生成しています

%p 
    = foo 

HTMLソース:

は、私は物事のようなビューヘルパーメソッドとリソースがあるだろうあなたが見ることができるように

<!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 

(注:2つのスペースをインデントするために非常に悪いRubyスタイルとみなされます)。

+0

Worked great。ツリー構造のコレクションのためのフォーマッタを使った簡単な例をブログ:http://tumblr.com/xq73f3ypd –

1

私はそれを疑っています。少なくとも、かなりの量の騒がしいことはありません。

あなたの= fooは、あなたのfooヘルパーによって返されたものを単純に印刷しています - それはhamlによって解析されません。ヘルパーメソッドにハムを書くこともできません。

これに対処するための最も簡単な方法は、ヘルパーにリテラル空白文字を追加することです(つまり、\n\t)。

requireあなたのヘルパーに関連するhamlクラスもあり、retで手動で解析メソッドを呼び出すこともできますが、これはおそらく価値のあるものより複雑です。

関連する問題