5

问题是|行尾的 a(由空格分隔)被识别为高级换行符的语法。如果你想得到这个字符作为输出怎么办?

例子

假设您要创建一个菜单,例如

Section 1 | Section 2 | ...

注意:如果这正是您想要的,请查看 concatenate link_to 与 pipe

是否显示链接取决于特定条件。在HAML/Ruby on Rails 中,这可能看起来不起作用

%div.menu
    -if condition1?
        #{link_to 'Section 1', section_1_path} |
    -if condition2?
        #{link_to 'Section 2', section_2_path} |
    -if condition3?
        ...

解决方法

作为一种(有点脏的)变通方法,我更改了代码:

%div.menu
    -if condition1?
        #{link_to 'Section 1', section_1_path} #{'|'}
    -if condition2?
        #{link_to 'Section 2', section_2_path} #{'|'}
    -if condition3?
        ...
4

4 回答 4

9

无需转义,只需与您要分离的元素相同的缩进即可。

%div.menu
  -if condition1?
    #{link_to 'Section 1', section_1_path} 
    |
  -if condition2?
    #{link_to 'Section 2', section_2_path} 
    |
  -if condition3?
      ...

您可以在浏览器中尝试: 在线 haml 编辑器:renderahtml2haml

于 2012-09-12T13:41:00.313 回答
3

Haml 解析器查找前面有空格的字符|来表示多行块。您可以使用它来创建解决方法,方法是使用 HTML 字符引用而不是 Haml 中的普通空格:

%div.menu
  -if condition1?
    #{link_to 'Section 1', section_1_path} |
  -if condition2?
    #{link_to 'Section 2', section_2_path} |
  -if condition3?
    ...

这样,Haml 将看不到空格,因此会将管道视为文字,但空格会出现在浏览器中。

您是否更喜欢这种解决方法而不是您自己的方法可能是一个品味问题。在这种特殊情况下,我认为基于 css 的解决方案会更好,但这取决于您需要支持的浏览器。

于 2012-09-13T14:55:04.767 回答
1

菜单应该是一个列表,所以让它成为一个无序列表并在 CSS 中:

.menu ul li:after {
  content: '|';
}
于 2012-09-12T12:59:05.230 回答
0

我认为你需要逃避这个角色。试试“\|”。

于 2012-09-12T12:56:57.227 回答