Railsテンプレートで、HAMLを使用してこの効果を実現する最終的なHTMLを実現したいと思います。
I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met
近づいて来るテンプレート:
I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
, then render this half of the sentence if a condition is met
ただし、これにより、リンクとコンマの間にスペースが生じることに注意してください。この空白を回避する実用的な方法はありますか?タグの周囲の空白を削除する構文があることは知っていますが、この同じ構文をテキストだけに適用できますか?私はこれを達成するための余分なマークアップのソリューションが本当に好きではありません。
これを行うためのより良い方法は、Hamlのヘルパーを介して導入されました。
= surround '(', ')' do
%a{:href => "food"} chicken
(<a href='food'>chicken</a>)
click
= succeed '.' do
%a{:href=>"thing"} here
click
<a href='thing'>here</a>.
= precede '*' do
%span.small Not really
*<span class='small'>Not really</span>
I will first
= succeed ',' do
= link_to 'link somewhere', 'http://example.com'
- if @condition
then render this half of the sentence if a condition is met
I will first
<a href="http://example.com">link somewhere</a>,
then render this half of the sentence if a condition is met
Hamlの「トリム空白」修飾子を使用してこれを行うこともできます。 Haml宣言の後に>
を挿入すると、周囲に空白が追加されなくなります。
I will first
%a{:href => 'http://example.com'}> link somewhere
- if @condition
, then render this half of the sentence if a condition is met
生成するもの:
I will first<a href='http://example.com'>link somewhere</a>, then render this half of the sentence if a condition is met
ただし、ご覧のとおり、>
修飾子は、リンクの前の空白も削除し、単語とリンクの間の目的のスペースを削除します。私はまだこれをうまく解決できていませんが、「最初に」の最後に
を追加することを除いて、次のようにします。
I will first
%a{:href => 'http://example.com'}> link somewhere
- if @condition
, then render this half of the sentence if a condition is met
これにより、読みにくい内挿を必要とせずに最終的に目的の出力が生成されます。
I will first <span><a href="http://example.com">link somewhere</a></span>, then render this half of the sentence if a condition is met
さて、私が解決しようとしているソリューションは次のとおりです。
def one_line(&block)
haml_concat capture_haml(&block).gsub("\n", '').gsub('\\n', "\n")
end
I will first
- one_line do
= link_to 'link somewhere', 'http://example.com'
- if @condition
, then render this half of the sentence
\\n
if a condition is met
この方法では、空白はデフォルトで除外されますが、「\ n」行で明示的に空白を含めることができます。 (それ以外の場合、HAMLは実際の改行として解釈するため、二重バックスラッシュが必要です。)より良いオプションがあるかどうかを教えてください!
HAMLの「アリゲーター構文」を使用できます
空白の削除:>および<
および<タグの近くの空白をより詳細に制御できます。 >はタグを囲むすべての空白を削除し、<はタグ内のすべての空白をすぐに削除します。それらは、ワニが空白を食べていると考えることができます。タグ定義の最後、クラス、ID、および属性宣言の後、/または=の前に配置されます。
http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_
これを行うと、先頭のスペースを維持できます。
%a{:href => 'http://example.com'}>= ' link somewhere'
スペースは引用符で囲まれています。
私がこの種のことに取り組んだアプローチは、文字列補間を使用することです。
I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}
補間のリテラル文字列の外観は好きではありませんが、以前に宣言した文字列または動的に生成された文字列でそれを使用したことがあります。
十分に文書化されていませんが、これは、HAMLホワイトスペース保存(>)とASCIIスペース(&#32;))を組み合わせて、ヘルパーではなくきれいに実現します。
%a{:href=>'/home'}> Home link
, 
%a{:href=>'/page'} Next link
これにより、必要なものが生成されます。
<a href='/home'>Anchor text</a>, 
<a href='/page'>More text</a>
しかし、私は同意します、HAMLは不必要なASCII文字をページに追加しますが、ヘルパーを使用するよりも効率的です)、これを行うより良い方法を考え出す必要があります。
山括弧「空白むしゃむしゃ」構文があります。そうでない場合は、ヘルパーメソッドを記述します。
過去に使用したことのある別のオプション:
- if @condition
%span> , then some more text after the link.
私は同様の問題に遭遇し、これを見つけたので、ヘルパーメソッドを必要としない別のソリューションを投稿すると思いました。 Ruby Interpolation#{}を使用して、リンクとifステートメントをラップします。
I will first
#{link_to 'link somewhere', 'http://example.com'}#{if true : ", then render this half of the sentence if a condition is met" end}
これは3.0.18で機能しますが、以前のリリースでも機能する場合があります。
私が働いた解決策は次のとおりです。
I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
= ", then render this half of the sentence if a condition is met"
=
を使用できますが、=
はRailsコードの結果を出力するために使用されますが、ここでは目的を果たします。
preserve 関数は私のために働いた
.white-space-pre= preserve "TEXT"
また、常に行うことができます:
= link_to url_path do
= ["part_1", "part_2"].join(", ")