我正在为一个小的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]}")如何在保持缩进的辅助块中插入我的Haml代码?
发布于 2013-11-15 13:30:38
最简单的解决方案是将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)您可以使用辅助对象,它允许您编写如下内容:
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代码添加到一个名为view.haml的文件中,然后可以从包含的模板呈现它,并将其作为局部变量传入:
view.haml**:**
- hand.each do |card|
.span2
%img(src="/images/#{card[:suite]}_#{card[:value]}")父模板:
= haml :view, :locals => {:hand => @the_hand}发布于 2013-11-13 00:36:13
您应该能够使用这里,医生
def view(hand)
hand.each do |card|
<<-HAML
.span2
%img(src="/images/#{card[:suite]}_#{card[:value]}")
HAML
end
end但是请注意,这里的docs从are on行开始使用空格,因此不幸的是,这会使缩进变得有些丑陋。
对于任何更复杂的事情,在单独的.haml文件中编写haml可能是有意义的。
https://stackoverflow.com/questions/19941863
复制相似问题