代码之家  ›  专栏  ›  技术社区  ›  Hakan Ensari

是否可以让HAML在Rails中缩进由视图助手生成的HTML?

  •  5
  • Hakan Ensari  · 技术社区  · 17 年前

    假设我有一个具有视图帮助器方法的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 回复  |  直到 17 年前
        1
  •  10
  •   Natalie Weizenbaum    17 年前

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

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

    (作为旁注,使用除两个空格之外的其他空格进行缩进被认为是非常糟糕的Ruby样式)。

        2
  •  1
  •   nfm    17 年前

    我对此表示怀疑——至少在没有大量垃圾的情况下。

    你的 = foo 只是打印您的 foo 助手-哈姆不会分析它。你也不能在你的助手方法中写haml。

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

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