【发布时间】:2011-05-18 05:38:32
【问题描述】:
我在 Rails 3 应用程序中使用 Haml,它的换行符让我抓狂!例如,
%span
foo
呈现为
<span>
foo
</span>
但我更想要
<span>foo</foo>
原因(除了更干净的 XML 之外)是额外的换行对我的 Selenium 测试来说是个问题,因为它们会破坏像 "//span[.='foo']" 这样的 XPath 查询的能力。所以我不得不改写'\nfoo\n'(ew!),或者使用//span[contains(text(), 'foo')],它匹配得太广泛了。
我知道我可以使用鳄鱼运算符(“”)来去除空格,但是因为我从来没有遇到过我想要换行符出现在输出,我最终只是在每行的末尾机械地添加它们。而且这看起来很不干。
所以现在我看到了两种解决方案:
- 强制 Haml 从不发出换行符,除非它们来自 Ruby 表达式。我看到一些
nuke_inner_whitespace/nuke_outer_whitespace变量散布在可能完成这项工作的 Haml 代码中,但我不确定如何在不求助于无偿猴子修补的情况下更改它们。 - 挂钩到 Rails 以将
gsub!("\n", "")应用于所有呈现的 HTML。 (对于 textarea 和 pre 的,我仍然可以使用~ "foo\nbar"让 Haml 发出foo&#x000A;bar。)但是在哪里可以挂接到 Rails?我有点迷失在代码中。
任何指针或其他建议表示赞赏!
更新:我已经使用下面的 Jason 的猴子补丁有一段时间了,我开始认为它不值得。例如。如果我想得到<span>[del]</span> <span>foo</span>,很难不在被核弹之间留出空白。甚至以下内容也会在页面上呈现为[del]foo:
%span
= '[del] '
%span
foo
所以我想我要回去手动添加鳄鱼运算符了(请参阅下面的自我回答)。生活和学习。
再次感谢杰森! :)
【问题讨论】:
-
如果有一些情况你想保留空格,你可以否定布尔值而不是在猴子补丁中强制它们为真。一般来说,我认为学习喜欢默认空格会更好:)
标签: ruby-on-rails haml ruby-on-rails-3