2011-12-26 13 views
10

Longshot, pero me pregunto si hay alguna manera de hacer algo como esto:HAML: Crear elemento contenedor/envoltura sólo si la condición es verdadera

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

En otras palabras, que siempre muestra el contenido en el interior, pero solo envuelve un contenedor a su alrededor si (alguna condición) es verdadera.

+0

Este es un duplicado de: http://stackoverflow.com/questions/72373 08/how-can-i-conditionally-wrap-some-haml-content-in-a-tag –

Respuesta

15

Se puede usar HTML puro, pero entonces tendría que tener la sentencia if tanto al inicio y al final:

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

Suponiendo que estás haciendo algo más que = name, se puede utilizar un parcial :

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

Usted podría también utilizar HAML de surround (aunque esto es un poco desordenado):

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

Por último, lo que probablemente me hago es no tratar de omitir la etiqueta p en absoluto, y sólo tiene que utilizar las clases CSS para la creación de dos p estilos diferentes de ver la forma en que quiero:

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

Gracias, el sonido envolvente es el tipo de cosa que estaba buscando. Poco complicado como dices, pero podrías hacerlo muy limpio con una función de ayuda basada en el sonido envolvente. ¡Gracias! – mahemoff

2

La manera más limpia que se puede pensar en hacer es así:

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

Pero no es exactamente haml.

Generalmente marcado es el de los contenidos, por lo que si show_paras es un pellizco más de presentación que probablemente debería utilizar CSS para cambiar el comportamiento del% p en lugar

+0

Es cierto, entiendo su punto, pero en mi caso, es un poco más complicado ya que hay contenido condicional dentro del cual podría decirse que es un para (o sección, etc.) en algunos casos, pero en otros casos, solo un div/span simple . – mahemoff

4

Otra opción es envolverlo en una etiqueta alternativa si la condición no se cumple, utilizando haml_tag:

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

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

Cuestiones relacionadas