Ruby on rails 自动从Haml输出中删除所有换行符
我在Rails 3应用程序中使用Haml,它的新词让我发疯!比如说,Ruby on rails 自动从Haml输出中删除所有换行符,ruby-on-rails,haml,ruby-on-rails-3,Ruby On Rails,Haml,Ruby On Rails 3,我在Rails 3应用程序中使用Haml,它的新词让我发疯!比如说, %span foo 呈现为 <span> foo </span> 因此,我想我要回到手动添加alligator操作符(见下面我的自我回答)。生活和学习 再次感谢杰森!:) 有几种方法: %span foo %span= "foo" - foo = ["f", "o", "o"].join("") %span= foo %span #{"foo"} - foo = ["f", "o", "
%span
foo
呈现为
<span>
foo
</span>
因此,我想我要回到手动添加alligator操作符(见下面我的自我回答)。生活和学习
再次感谢杰森!:) 有几种方法:
%span foo
%span= "foo"
- foo = ["f", "o", "o"].join("")
%span= foo
%span #{"foo"}
- foo = ["f", "o", "o"].join("")
%span #{foo}
如果在元素名称的末尾放置小于号,则内容周围的空白将被抑制:
%span<
foo
可能不难找到Haml,并在引擎选项中添加一个选项,以始终使用nuke空格。如果启用,parse_标记方法可以检查此选项,并将内部和外部标志设置为true。我将把这作为练习留给读者。:) 好吧,我想我会尝试自我回答我的问题——可能没有干净/合理的方法删除所有换行符,但也许我实际上并不需要。对于典型的XPath测试表达式来说,如果内联元素周围没有换行符就足够了
因此,我想我将只放置一个内部空格吃符(),类似于@yfeldblum的答案,我决定简单地在换行符上拆分,在空格上联接,以避免在呈现到js中的html中出现换行符。例如:
- content = capture_haml do
%div
%ul
%li Stuff
# ...
然后后来,
:javascript
var stuff = "#{content.split("\n").join(" ")}";
// ...
嗯,说得好。虽然很多次,而不是一个“foo”"表达式中,我在元素中有大量的HAML代码。因此,我认为将其与%元素放在同一行中并不是一个通用的解决方案。使用HAML多行语法可以将代码分散到多行中,但HAML将其视为一行。实际上,我相信多行运算符只能跨Ruby代码,而不是嵌套的HAML代码。多行运算符也将跨越文本,包括嵌套的HAML。请尝试。请注意,这将在输出中包括每个管道字符前面的所有空格,最后一个除外。Hm,我不确定您的意思。“%p |\n␣␣%span |\n␣␣␣␣text |“将导致%span text听起来不是忘恩负义,但我实际上写了“我知道我可以使用alligator运算符(“”)去除空白”…;-)如果不查阅参考资料,我不会问任何问题,因为这是值得的。对不起。乔:我加了一个猴子补丁来做你想做的事。看不到更干净的方式。哇,太酷了——谢谢!把这个放在config/initializers/haml_nuke_whitespace.rb中对我来说非常有用。随着猴子补丁的出现,这是令人惊讶的美丽。我会记得别名法。此外,forking HAML添加一个适当的选项已适当添加到我的“某天要做的事情”列表中:关于这一点的更新:我用了一点,但自动剥离所有空白结果导致太多的痛苦,不值得在实践中使用。我现在在需要它的地方显式地添加“”。不过,谢谢你的回答,杰森!如果有一些情况下你想保留空格,你可以否定布尔值,而不是在猴子补丁中强迫它们为真。一般来说,我认为最好学会喜欢默认的空白:)
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
%div
%ul
%li<
%span<
stuff...
- content = capture_haml do
%div
%ul
%li Stuff
# ...
:javascript
var stuff = "#{content.split("\n").join(" ")}";
// ...