我使用HAML遇到了Ruby on Rails模板的问题。
我不知道如何在标记内应用特定的类,例如:
%p My name is John Doe
我想将一个.highlight类添加到" name"字。这该怎么做?我只知道这种方式:
%p
%span My
%span.highlight name
%span is John Doe
但当然这不是最好的方法,我希望如此。有什么想法吗?
答案 0 :(得分:1)
无论如何,您必须将突出显示的文本放在其自己的元素中,因此您的代码非常接近。但是,您不需要将其余文本包装在元素中:
%p
My
%span.highlight name
is John Doe
这将产生:
<p>
My
<span class="highlight">name</span>
is John Doe
</p>
修改强>
如果是问号,您可以使用Haml的succeed
辅助方法:
%p
= succeed "?" do
What's your
%span.highlight name
这将呈现:
<p>
What's your
<span class='highlight'>name</span>?
</p>
还有precede
和surround
方法,您可以在此处阅读:http://haml.info/docs/yardoc/file.REFERENCE.html#helper-methods
如果您更喜欢使用字符串插值,那么定义自己的辅助方法可能最简单。
def hl(str)
capture_haml {
haml_tag 'span.highlight', escape_once(str)
}.strip!.html_safe
end
由于这是一种精心设计,让我从内到外分解。首先,我们需要使用escape_once
转义字符串。只有str
来自用户输入(因此可能导致XSS攻击)时才需要这样做,但在任何情况下都有好处。然后我们使用haml_tag
在span.highlight
内呈现字符串。然后我们必须将此输出捕获为带有capture_haml
的字符串,因为我们在插值中使用它(通常haml_tag
写入Haml缓冲区而不是返回字符串)。然后我们使用strip!
因为Haml将在此之后呈现换行符,并且您说您不希望这样。最后,我们使用html_safe
告诉Rails不要转义输出,因为它会破坏我们的<span>
并且我们已经转义输入所以我们知道它是安全的。
现在,您可以在插值Ruby中使用hl
方法:
%p
What's your #{hl "name"}?
这将呈现:
<p>
What's your <span class='highlight'>name</span>?
</p>