在HAML的段落中应用一个类

时间:2015-08-09 17:51:18

标签: ruby-on-rails ruby haml

我使用HAML遇到了Ruby on Rails模板的问题。

我不知道如何在标记内应用特定的类,例如:

%p My name is John Doe

我想将一个.highlight类添加到" name"字。这该怎么做?我只知道这种方式:

%p
    %span My
    %span.highlight name
    %span is John Doe

但当然这不是最好的方法,我希望如此。有什么想法吗?

1 个答案:

答案 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>

还有precedesurround方法,您可以在此处阅读: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_tagspan.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>