2011-12-26 29 views
10

Longshot doğrudur yalnızca konteyner/sarıcı eleman oluşturun, ancak böyle bir şey yapmak için herhangi bir yolu olup olmadığını merak ediyorum: Bir başka deyişleHAML: koşul

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

, her zaman iç içeriğini gösterir, ancak (bazı koşul) doğruysa, etrafındaki bir kabı sadece sarar. Kısmi kullanabilirsiniz, sadece = name daha fazlasını yapıyoruz varsayarsak

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

:

+0

Bu kopyası: http://stackoverflow.com/questions/72373 08/nasıl-i-koşullu-sarma-bazı-haml-içerik-in-a-etiket –

cevap

15

Çiğ html kullanabilirsiniz, ama sonra başında ve sonunda her ikisi de eğer bildirimleri olması gerekirdi :

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

Ayrıca HAML en surround kullanabilirsiniz (bu biraz dağınık olsa da):

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

Son olarak, muhtemelen hiç p etiketini çıkarın deneyin değildir yoktur ve sadece istediğim şekilde görünmek iki farklı p stilleri kurmak için CSS sınıflarını kullanacağı:

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

Teşekkürler, surround aradığım şey tür. Söylediğin gibi biraz dağınık, ama etrafı çevreleyen yardımcı bir işlevle onu çok temizleyebilirsin. Teşekkürler! – mahemoff

2

en temiz yolu ben Bunu yapmayı düşünebilirsiniz:

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

Ama tam olarak haml değil. show_paras muhtemelen% p davranışını değiştirmek için css kullanarak gereken daha presentational çimdik ise öylesine

Genellikle biçimlendirme, içerik için yerine

+0

Doğru, ben sizin dikkatinizi çekerim, ama benim durumumda, içinde koşullu bir içerik olduğu için, bazı durumlarda bir para (veya bölüm vb.) Oluşturacak bir miktar (ama diğer durumlarda), sadece basit bir div/span olması biraz daha karmaşıktır. . – mahemoff

4

Diğer bir seçenek, alternatif bir etiketi varsa onu sarmak için ise koşul haml_tag kullanılarak karşılanmazsa:

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

[Dokümantasyon] (http://haml.info/docs/yardoc/Haml/Helpers.html#haml_tag-instance_method) – Carpetsmoker