假设我有一个带有视图帮助方法的事物资源,例如:
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>
正如您所看到的,辅助输出不会缩进为其余代码。有什么方法可以解决这个问题吗?
答案 0 :(得分: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风格。)
答案 1 :(得分:1)
我对此表示怀疑 - 至少不会没有大量的捣乱。
你的= foo
只是打印你的foo
助手返回的内容 - 它不会被haml解析。你也不能在你的助手方法中写haml。
我能想到的最简单的方法是在你的帮助器中添加文字空白字符(即\n
和\t
)。
你也可以在你的帮助器中require
相关的haml类,并在ret
上手动调用解析方法,但这可能比值得更复杂。