2011-12-26 10 views
10

ロングショットコンテナ/ラッパー要素を作成しますが、私はこのような何かを行うにどのような方法があるかどう思ったんだけど:、言い換えればHAML:条件がtrueの場合にのみ

%p # ONLY SHOW THIS IF LOCAL VARIABLE show_paras IS TRUE 
    = name 

が、それは常に内部の内容を示してい(some-condition)が真であれば、コンテナを囲むだけです。あなたが部分的に使用することができ、あなただけの= name以上のことをやっていると仮定すると、

- if show_paras 
    <p> 
= name 
- if show_paras 
    </p> 

+0

これはの重複です:http://stackoverflow.com/questions/72373 08/how-can-i-conditionally-wrap-some-haml-content-in-a-tag –

答えて

15

あなたは生のHTMLを使用することができますが、その後、あなたは開始時と終了時の両方をif文を持っている必要があるだろう:

- if show_paras 
    %p= render "my_partial" 
- else 
    = render "my_partial" 

またHAMLのsurroundを使用することができます(これは少し厄介ですが):

- surround(show_paras ? "<p>" : "", show_paras ? "</p>" : "") do 
    = name 

最後に、私はおそらくすべてでpタグを省略しようとしていないんし、ちょうど私が望むように見えるために、2つの異なるpのスタイルを設定するCSSクラスを使用するだろうか:

%p{:class => show_paras ? "with_paras" : "without_paras"} 
    = name 
+0

おかげさまで、サラウンドは私が探していたものです。あなたが言うようにちょっと厄介ですが、サラウンドでヘルパー機能を構築することで、きれいにすることができます。ありがとう! – mahemoff

2

クリーンな方法をIこのようなことを考えることができます:

= show_paras ? content_tag(:p, name) : name 

しかし、それはちょうどhamlではありません。

一般的なマークアップはコンテンツに対するものであるので、show_parasがより体裁の微調整であれば、あなたはおそらく代わりに

+0

本当に、私はあなたの要点を取っていますが、私のケースでは、条件付きの内容が含まれているために少し複雑ですが、場合によってはパラ(またはセクションなど)となるでしょうが、 。 – mahemoff

4

別のオプションがあれば、代替タグでラップすることである%pの動作を変更するためにCSSを使用する必要があります条件はhaml_tagを使用して、満たされていない:

- haml_tag(show_paras ? :p : :div) do 
    = name 
+1

[ドキュメント](http://haml.info/docs/yardoc/Haml/Helpers.html#haml_tag-instance_method) – Carpetsmoker

関連する問題