98

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

ただし、これによりリンクとコンマの間にスペースが生じることに注意してください。この空白を回避する実用的な方法はありますか?タグの周りの空白を削除する構文があることは知っていますが、これと同じ構文をテキストだけに適用できますか?これを達成するための追加のマークアップのソリューションは本当に好きではありません。

4

13 に答える 13

212

これを行うためのより良い方法は、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
于 2011-06-08T18:56:15.117 に答える
40

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

ただし、ご覧のとおり、>修飾子はリンクの前の空白も削除し、単語とリンクの間の必要なスペースを削除します。&nbsp;「私が最初に」の最後に次のように追加することを除いて、私はまだこれを回避するためのかなりの方法を理解していません。

I will first&nbsp;
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

これは、多くの読みにくい補間なしで、最終的に目的の出力を生成します。

I will first&nbsp;<span><a href="http://example.com">link somewhere</a></span>, then render this half of the sentence if a condition is met
于 2009-10-07T11:30:39.463 に答える
12

了解しました。これが私が解決しようとしている解決策です。

ヘルパー

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はそれを実際の改行として解釈します。)もっと良いオプションがあるかどうか教えてください!

于 2009-08-21T12:16:46.450 に答える
6

HAMLの「ワニ構文」を使用できます

空白の削除:>および<

および<を使用すると、タグの近くの空白をより細かく制御できます。>はタグを囲むすべての空白を削除し、<はタグ内のすべての空白をすぐに削除します。それらは、ワニが空白を食べると考えることができます。>はタグの外側を向いて外側の空白を食べ、<はタグを向いて内側の空白を食べます。これらは、タグ定義の最後、クラス、ID、および属性の宣言の後、/または=の前に配置されます。

http://haml.info/docs/yardoc/file.REFERENCE.html#whitespace_removal__and_

于 2015-02-24T12:40:50.283 に答える
5

私がこの種のことに取り組んだアプローチは、文字列補間を使用することです。

I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}

補間でのリテラル文字列の外観は好きではありませんが、以前に宣言された文字列または動的に生成された文字列で使用したことがあります。

于 2009-08-21T16:49:41.523 に答える
5

これを行うと、先頭のスペースを維持できます。

%a{:href => 'http://example.com'}>= ' link somewhere'

スペースは引用符で囲まれています。

于 2009-10-17T03:18:26.743 に答える
3

十分に文書化されていませんが、これは、ヘルパーではなく、ASCIIスペース(&#32;)と組み合わせたHAML空白保存(>)を使用して明確に実現されます。

%a{:href=>'/home'}> Home link
,&#32; 
%a{:href=>'/page'} Next link

これにより、必要なものが生成されます。

<a href='/home'>Anchor text</a>,&#32;
<a href='/page'>More text</a>

しかし、私は同意します。HAMLは、ページに不要なASCII文字を追加するため、これを行うためのより良い方法を考え出す必要があります(ただし、ヘルパーを使用するよりも効率的です)。

于 2009-11-16T08:24:47.660 に答える
1

私は同様の問題に遭遇し、これを見つけたので、ヘルパーメソッドを必要としない別の解決策を投稿すると思いました。Ruby補間#{}を使用して、リンクと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で機能しますが、以前のリリースでも機能する可能性があります。

于 2010-09-18T21:36:23.817 に答える
1

角かっこ「空白のつぶやき」構文があります。それ以外の場合は、ヘルパーメソッドを記述します。

于 2009-08-21T11:49:30.127 に答える
1

私が過去に使用したさらに別のオプション:

- if @condition
  %span> , then some more text after the link.
于 2013-04-13T07:37:50.017 に答える
0

また、常に行うことができます:

= link_to url_path do 
  = ["part_1", "part_2"].join(", ")
于 2014-09-10T04:13:18.640 に答える
0

私が働いた解決策は次のとおりです。

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コードの結果を出力するために使用されますが=、を使用できますが、ここでは目的を果たします。=

于 2015-11-24T10:08:21.350 に答える
0

保存機能は私のために働いた

.white-space-pre= preserve "TEXT"

于 2017-04-20T02:04:13.073 に答える