2011-07-28 11 views
22

Tengo el siguiente literal XML:incluyen condicionalmente atributo en literal XML

<input type='radio' 
     name={funcName} 
     value='true' /> 

me gustaría incluir checked='checked' si cond es cierto.

He intentado esto,

<input type='radio' 
     name={funcName} 
     value='true' 
     { if (cond) "checked='checked'" else "" } /> 

pero no funciona.

(yo realmente gustaría evitar la repetición de toda la etiqueta.)

+0

duplicado posible de [? ¿Cómo puedo añadir un atributo XML, o no, en función de una opción] (http://stackoverflow.com/preguntas/4777971/cómo-do-i-ADD-an-xml-atributo-o-no-según-en-un-opción) – Suma

Respuesta

29

Option funciona también, lo que reduce el uso innecesario de null:

scala> val checked:Option[xml.Text] = None 
checked: Option[scala.xml.Text] = None 

scala> val xml = <input checked={checked} /> 
xml: scala.xml.Elem = <input ></input> 
+0

¡Hermoso, gracias! – aioobe

+2

También se puede usar 'opt.orNull' para omitir la conversión a' xml.Text'. – Tvaroh

+0

Nota: solo funciona la opción [Texto], no la opción [Cadena]. – Suma

8

Si desea añadir el atributo sólo cuando está marcada, se puede añadir que después de usar Scala API XML:

import scala.xml._ 

val snippet = { 

    val x = <input type='radio' 
       name={funcName} 
       value='true' /> 

    if(cond) { 
    x % new UnprefixedAttribute("checked","checked",Null) 
    } else x 

} 
8

creas o no, puede hacerlo de esta manera:

<input type='radio' 
     name={funcName} 
     value='true' 
     checked={ if (cond) "checked" else null } /> 

esta es una de las partes oscuras de Scala, donde null acto cada vez se acostumbra

Sólo para aclarar, que hace exactamente lo que quiere: si es condfalse, entonces input tendrán ningún checked atributo.

+0

wow, gracias! ... – aioobe

+1

Evitar el uso de nulo en valores de atributos. Causa una cantidad considerable de problemas en otras partes de las bibliotecas XML 2.8. –

+0

@DavidPollak ¿Estás seguro? Al registrar en la consola, parece que el atributo no se crea en absoluto en este caso. – Suma

Cuestiones relacionadas