我正在为一个小的sinatra应用程序写一个助手,它打印一些存储在一个数组中的散列的游戏卡。
每张卡都有这样的结构:
{ card: 'Ace', suit: :spades, value: 11 }
卡片图像的文件名是“spades_11.jpg”。
我正在写一个助手在我的视图中显示卡片:
def view(hand)
hand.each do |card|
#print the card
end
end
我需要这样的输出:
.span2
%img(src="/images/#{card[:suite]}_#{card[:value]}")
如何在保持缩进的helper块中插入haml代码?
最佳答案
最简单的解决方案是直接从助手返回HTML作为字符串:
def view(hand)
hand.map do |card|
"<div class='span2'><img src='/images/#{card[:suite]}_#{card[:value]}'></div>"
end.join
end
从你的火腿里叫出来的东西是这样的:
= view(@the_hand)
您可以使用
haml_tag
helper来编写如下内容: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
标记的设置,例如/>
。如果您想使用pure-haml来标记每张卡片(这个例子很简单,可以不使用帮助程序,但是您肯定想对更复杂的部分执行这个操作),那么可以使用partial。将haml代码添加到名为的文件(例如
view.haml
)中,然后可以从包含的模板中呈现该代码,并将其作为本地变量传递:view.haml
- hand.each do |card|
.span2
%img(src="/images/#{card[:suite]}_#{card[:value]}")
父模板:
= haml :view, :locals => {:hand => @the_hand}
关于ruby - 将HAML插入Sinatra帮助器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19941863/