在Rails中,是否可以通过视图助手生成的Haml缩进HTML呢?

5

假设我有一个名为things的资源,并且有一个视图助手方法:

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>

如您所见,助手输出的代码没有像其他代码一样缩进。有什么方法可以解决这个问题吗?

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 代码风格)。


很好地工作。在此处发布了一篇关于树形结构集合格式化程序的简单示例博客:http://tumblr.com/xq73f3ypd - Hakan Ensari

1

我对此表示怀疑 - 至少不会不经过大量操作。

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

我能想到最简单的处理方式就是在你的helper中添加字面上的空格字符(即\n\t)。

你还可以在你的helper中require相关的haml类,并手动调用ret上的解析方法,但这可能比值得麻烦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接