【问题标题】:How can I tell HAML to keep whitespace at the end of my view's lines?如何告诉 HAML 在视图行的末尾保留空格?
【发布时间】:2013-11-24 20:06:36
【问题描述】:

我的 Rails 项目中有一些用于向用户发送文件的 HAML 视图。它们不呈现为 HTML,只是下载的纯文本文件。这些文件必须匹配一种非常特定的格式,并且该格式有一个特点,即要求每隔一行以制表符结尾。

Line 0a\t01234
Line 0b\t
Line 1a\t12345
Line 1b\t
Line 2a\t23456
Line 2b\t

a 行的制表符打印得很好,但b 行没有。如果我在制表符后添加任何非空白字符,则会打印制表符。但是当它是该行的最后一个字符时,它不会。

我的看法是这样的

- @line_pairs.each do |line_pair|
  = line_pair.a.words + "\t" + line_pair.a.numbers
  = line_pair.b.words + "\t"

我确定制表符不存在(我的编辑器会直观地显示它们)。也没有空间或类似的东西。我只是得到

Line 0a\t01234
Line 0b
Line 1a\t12345
Line 1b
Line 2a\t23456
Line 2b

有没有办法解决这个问题?感谢您的帮助。

【问题讨论】:

  • 感谢您的建议,但这不起作用。结果文件只有 	 选项卡应该在哪里。
  • the ugly option 设置为true 是否有效? (Rails 在生产环境中应该默认为丑陋。)
  • (话虽如此,即使使用 ugly 确实有效,我还是建议您只使用 ERB。Haml 假设您正在创建 HTML,它并不适合这样的事情您需要对空白进行精细控制。)
  • 为什么要使用 Haml 处理文本文件?它不是为此而创建的。只需使用 ERb 会容易得多。

标签: ruby-on-rails ruby haml


【解决方案1】:

The haml documentation 表示波浪号 (~) 的行为类似于 =,但保留了空格。

这行得通吗?

- @line_pairs.each do |line_pair|
  ~ line_pair.a.words + "\t" + line_pair.a.numbers
  ~ line_pair.b.words + "\t"

【讨论】:

    【解决方案2】:

    试试:preserve

    :preserve
        - @line_pairs.each do |line_pair|
    

    【讨论】:

      【解决方案3】:

      matt 指出的正确解决方案实际上是只使用 ERB,因为 HAML 并不是为了满足在这个细节级别控制空白的需求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多