如何让一行以|结尾 (管道)在HAML?

问题是一个| 在行的末尾(由空格分隔)被识别为高级换行符的语法。 如果你想把这个角色作为输出怎么办?

假设您要创建一个菜单

 Section 1 | Section 2 | ... 

注意:如果这正是您想要的,那么请看一下 使用pipe连接link_to 。

是否显示链接取决于某种条件。 在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? ... 

不需要转义,只需要与你想要分离的元素相同的缩进。

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

你可以在浏览器中尝试这个: 在线haml编辑器:rendera或html2haml

Haml解析器看起来像 以空格开头的字符表示多行块。 您可以使用此方法通过在Haml中使用HTML字符引用而不是普通空间来创建变通方法:

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

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

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

菜单应该是一个列表,所以使它成为无序列表和CSS:

 .menu ul li:after { content: '|'; } 

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