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

时间:2012-09-12 12:54:44

标签: ruby-on-rails ruby haml

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

实施例

假设您要创建一个类似

的菜单
Section 1 | Section 2 | ...

注意:如果这正是您想要的,请查看 concatenate link_to with 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 个答案:

答案 0 :(得分:9)

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

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

你可以在浏览器中试试这个: online haml editor: rendera 要么 html2haml

答案 1 :(得分:3)

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的解决方案会更好,但这取决于您需要支持哪些浏览器。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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