辅助函数可以接收一个yield
来渲染块的块。有时候我希望用过滤器指定该块。例如:
= doc_page title: 'FAQ' do
:markdown
# Welcome to the *FAQ*
这不是那么干,因为我们总是一起写doc_page和markdown。我可以让辅助方法接受一个块并将其传递给HAML过滤器。类似的东西:
= doc_page title: 'FAQ' do
# Welcome to the *FAQ*
在这个幻想中,doc_page
是一个辅助方法,可以执行一些设置工作,然后通过降价传递内容,从而使我们无需在任何地方声明:markdown
并使世界成为干燥的地方。< / p>
答案 0 :(得分:4)
目前无法在帮助程序中使用过滤器。另一种方法是使用redcarpet来解析markdown,然后将输出传递给帮助者。
一个例子是:
= doc_page title: 'FAQ', :markdown do
### my markdown
= doc_page title: 'FAQ' do
normal html
doc_page的实现将是这样的:
def doc_page(title, markup=:html)
content = yield
if markup == :markdown
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML)
content = markdown.render(content)
end
content
end
这将解决您的问题,因为您在帮助程序中定义了降价过滤器。而且你的haml中不需要额外的缩进级别。
答案 1 :(得分:2)
您可以直接使用倾斜(api haml用于渲染降价)而不是通过haml。可能是这样的(未经测试)。
markdown_template = Tilt['md'].new { "# this is markdown code" }
markdown_template.render
您可以在Tilt docs中找到类似的示例。 但这更像是一个想法,而不是一个完整的实现。
答案 2 :(得分:2)
我很害怕,但这是不可能的,因为haml是preprocessor,基本上是这段代码:
= doc_page title: 'FAQ' do
# Welcome to the *FAQ*
%a href="/" link
将在运行时的ruby代码中转换为:
concat(doc_page title: 'FAQ' do
# Welcome to the *FAQ*
concat('<a href="/">link</a>')
end)