4

这个 HAML

%script{:type => "text/javascript"}
  :plain
    $(document).ready(function() {
      bar();
      var foo = foo_func("#{}");
    });

正如预期的那样:

<script type='text/javascript'>
  $(document).ready(function() {
    bar();
    var foo = foo_func("");
  });
</script>

但是这个几乎相同的HAML(仅更改bar()prep()):

%script{:type => "text/javascript"}
  :plain
    $(document).ready(function() {
      prep();
      var foo = foo_func("#{}");
    });

给出了这个:

<script type='text/javascript'>
  $(document).ready(function() {
  prep();
  var foo = foo_func("");
});
</script>

注意第二种情况下的混乱缩进

为什么会改变bar()导致prep()这种奇怪的差异?

4

1 回答 1

3

这是由匹配 Haml 用于处理空格的正则表达式中的字符pre引起的。prep()

在 Haml 中,您使用空格来指定元素的内容,通常这是可以的,因为在查看 HTML 时,空格会被“压缩”,使其显示为单个字符。但是,空格在某些 HTML 元素(和)中很重要pre,Haml 会尝试检测和处理这些元素。在这种情况下,正则表达式匹配并且第一行之后的块不缩进。codetextarea

此代码已在最新版本(当前为 4.0.1.rc.1)中更改,并且在该版本中不会发生这种情况。我还创建了一个拉取请求,用于修复 3-1 分支中的正则表达式

于 2013-03-10T17:45:43.917 回答