5

次のようなビューヘルパーメソッドを備えたモノのリソースがあるとします。

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>

ご覧のとおり、ヘルパー出力は残りのコードのようにインデントされていません。これを改善する方法はありますか?

4

2 に答える 2

10

Haml で提供されているhaml_tagヘルパー メソッドを試してください。いくつかの点で似content_tagていますが、適切にインデントされた HTML を出力します。主な違いは、文字列を返すのではなく、テンプレートに直接出力することです。例えば:

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

(ちなみに、インデントに 2 つのスペース以外を使用することは、非常に悪い Ruby スタイルと見なされます)。

于 2009-10-07T08:02:45.740 に答える
1

私はそれを疑います-少なくとも、かなりの量のいじくり回しがないわけではありません.

ヘルパーから= foo返されたものを単に出力しているだけで、 hamlによって解析されていません。fooまた、ヘルパー メソッドに haml を記述することもできません。

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

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

于 2009-10-06T22:48:21.900 に答える