最简单的解决方案是直接从您的助手返回 HTML 作为字符串:
def view(hand)
hand.map do |card|
"<div class='span2'><img src='/images/#{card[:suite]}_#{card[:value]}'></div>"
end.join
end
从您的 Haml 中调用它,例如:
= view(@the_hand)
您可以使用haml_tag
帮助程序,它可以让您编写如下内容:
def view(hand)
hand.each do |card|
haml_tag '.span2' do
haml_tag :img, 'src' => "/images/#{card[:suite]}_#{card[:value]}"
end
end
end
请注意,haml_tag
直接写入输出而不是返回字符串,因此您必须将其与-
而不是一起使用=
:
- view(@the_hand)
或使用capture_haml
.
这种方法意味着你的助手依赖于 Haml。第一种方法可以使用您使用的任何模板语言,但不会尊重诸如format
是否img
以/>
.
如果你想为每张卡片使用纯 Haml 标记(这个例子很简单,可以不用助手,但你肯定希望对更复杂的部分这样做)你可以使用部分。将您的 Haml 代码添加到名为 eg 的文件view.haml
中,然后您可以从包含模板中渲染它,并将其作为局部变量传入手中:
view.haml
:
- hand.each do |card|
.span2
%img(src="/images/#{card[:suite]}_#{card[:value]}")
父模板:
= haml :view, :locals => {:hand => @the_hand}