2011-12-26 11 views
10

Longshot, ale zastanawiam się, czy jest jakiś sposób, żeby zrobić coś takiego:haml: Tworzenie elementu kontener/wrapper tylko wtedy, gdy warunek jest prawdziwy

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

Innymi słowy, to zawsze pokazuje zawartość w środku, ale tylko opakowuje wokół niego kontener, jeśli (niektóre warunki) jest prawdziwe.

+0

to jest duplikatem: http://stackoverflow.com/questions/72373 08/how-can-i-condition-wrap-some-haml-content-in-a-tag –

Odpowiedz

15

Można użyć surowego html, ale wtedy trzeba by mieć if zarówno na początku i na końcu:

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

Zakładając, że robisz więcej niż tylko = name można użyć częściowy :

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

można też użyć haml na surround (choć jest trochę brudny):

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

Wreszcie, co to pewnie nie jest nie spróbować pominąć tag p w ogóle i po prostu korzystać z klas CSS ustawić dwie różne p style wyglądać tak, jak chcesz:

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

Dzięki, surround jest rzeczą, której szukałem. Nieco niechlujny jak mówisz, ale możesz go bardzo wyczyścić dzięki funkcji pomocnika opartej na dźwięku przestrzennego. Dzięki! – mahemoff

2

najczystszym sposobem ja może myśleć o zrobieniu jest tak:

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

Ale to nie jest dokładnie haml.

Ogólnie znaczników jest za treści, więc jeśli show_paras jest bardziej prezentacyjny uszczypnąć powinieneś być za pomocą CSS, aby zmienić zachowanie% p zamiast

+0

To prawda, rozumiem, ale w moim przypadku jest to nieco bardziej zaangażowane, ponieważ w niektórych przypadkach istnieje warunkowa treść, która w niektórych przypadkach sprawiałaby, że jest to para (lub sekcja itd.), Ale w innych przypadkach po prostu div/span . – mahemoff

4

Inną opcją jest owinąć go w alternatywnym znacznika, jeśli warunek nie jest spełniony, używając haml_tag:

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

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

Powiązane problemy