2009-10-06 38 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上手动调用解析方法,但这可能比值得的更复杂。