5

假设我有一个带有视图辅助方法的事物资源,例如:

module ThingsHelper
  def foo
    ret = ""
    3.times { ret += content_tag(:li, "foo") }
    content_tag(:ul, ret)
  end
end

然后,这在模板中使用:

%p
  = foo 

生成的 HTML 源代码如下所示:

<!DOCTYPE html>
<html>
    <head>
        <title>Foo</title>
    </head>
</html>
<body>
    <p>
        <ul><li>foo</li><li>foo</li><li>foo</li></ul>
    </p>
</body>

如您所见,帮助程序输出没有像其余代码一样缩进。有什么办法可以补救吗?

4

2 回答 2

10

试试Haml 提供的haml_tag辅助方法。在某些方面就像content_tag,但它输出正确缩进的 HTML。主要区别在于它直接输出到模板,而不是返回字符串。例如:

module ThingsHelper
  def foo
    haml_tag :ul do
      3.times { haml_tag(:li, "foo") }
    end
  end
end

(作为旁注,使用两个空格以外的其他内容进行缩进被认为是非常糟糕的 Ruby 风格)。

于 2009-10-07T08:02:45.740 回答
1

我对此表示怀疑——至少不是没有大量的胡闹。

= foo只是打印foo助手返回的内容 - 它没有被 haml 解析。而且你也不能在你的辅助方法中编写 haml 。

我能想到的最简单的处理方法就是在你的助手中添加文字空白字符(即\n\t)。

您也可以require在帮助程序中使用相关的 haml 类并手动调用解析方法ret,但这可能比值得更复杂。

于 2009-10-06T22:48:21.900 回答