Jo *_*iss 4 haml ruby-on-rails ruby-on-rails-3
我在Rails 3应用程序中使用Haml,它的新行让我疯了!例如,
%span
foo
Run Code Online (Sandbox Code Playgroud)
呈现为
<span>
foo
</span>
Run Code Online (Sandbox Code Playgroud)
但我更愿意
<span>foo</foo>
Run Code Online (Sandbox Code Playgroud)
原因(除了更清晰的XML)是额外的换行是我的Selenium测试的一个问题,因为它们搞乱了做XPath查询的能力"//span[.='foo']".所以我不得不写'\nfoo\n'(ew!),或者使用//span[contains(text(), 'foo')],它们的匹配范围太广了.
我知道我可以使用鳄鱼操作符("<"和">")去除空格,但由于我没有希望新行出现在输出中的情况,我最后会添加它们机械地在每条线的末端.而这似乎非常不明智.
所以现在我看到两个解决方案:
nuke_inner_whitespace/ nuke_outer_whitespace变量可能会起作用,但我不确定如何在不诉诸无偿的猴子修补的情况下改变它们.gsub!("\n", "")所有呈现的HTML.(对于textarea和pre,我仍然可以使用~ "foo\nbar"Haml发射foo
bar.)但是哪里是正确的地方挂钩Rails?我在代码中有点迷失.任何指针或其他建议赞赏!
更新:我已经在下面使用了Jason的猴子补丁一段时间了,我开始认为它不值得.例如,如果我想获得<span>[del]</span> <span>foo</span>,很难在核心之间没有空白区域.即使以下内容也会[del]foo在页面上呈现:
%span
= '[del] '
%span
foo
Run Code Online (Sandbox Code Playgroud)
所以我想我会回去手动添加鳄鱼操作员(参见下面的自我回答).活到老,学到老.
再次感谢杰森!:)
Jas*_*red 11
如果在元素名称的末尾放置一个小于号的符号,则内容周围的空格将被抑制:
%span<
foo
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Haml参考中的空白删除.
似乎没有任何干净的方法强制所有标签上的这些标志,但以下猴子补丁适用于Haml 3.0.24:
module Haml::Precompiler
def parse_tag_with_nuked_whitespace(line)
result = parse_tag_without_nuked_whitespace line
unless result.size == 9 && [false,true].include?(result[4]) && [false,true].include?(result[5])
raise "Unexpected parse_tag output: #{result.inspect}"
end
result[4] = true # nuke_outer_whitespace
result[5] = true # nuke_inner_whitespace
result
end
alias_method_chain :parse_tag, :nuked_whitespace
end
Run Code Online (Sandbox Code Playgroud)
分叉Haml并为引擎选项添加一个选项以永远核对空格可能并不困难.如果启用,parse_tag方法可以检查此选项,并将内部和外部标志设置为true.我会将此作为练习留给读者.:)
| 归档时间: |
|
| 查看次数: |
4424 次 |
| 最近记录: |