5

問題は、|行末の (空白で区切られた) が高度な改行の構文として認識されることです。この文字を出力として取得したい場合はどうすればよいですか?

次のようなメニューを作成したいとします。

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

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 エディタ: rendera または html2haml

于 2012-09-12T13:41:00.313 に答える
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 ベースのソリューションの方が優れていると思いますが、それは、サポートする必要があるブラウザーによって異なります。

于 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 に答える