son - etiquetas xml
Condicionalmente incluir atributo en literal XML (3)
Lo creas o no, puedes hacerlo así:
<input type=''radio''
name={funcName}
value=''true''
checked={ if (cond) "checked" else null } />
Esta es una de las partes oscuras de Scala donde null
realmente se usa.
Solo para dejarlo en claro, hace exactamente lo que quiere: si cond
es false
, entonces la input
no tendrá ningún atributo checked
.
Tengo el siguiente literal XML:
<input type=''radio''
name={funcName}
value=''true'' />
Me gustaría incluir checked=''checked''
si cond
es verdadero.
He intentado esto,
<input type=''radio''
name={funcName}
value=''true''
{ if (cond) "checked=''checked''" else "" } />
pero no funciona
(Realmente me gustaría evitar repetir la etiqueta completa).
Si desea agregar el atributo solo cuando está marcado, puede agregarlo después de usar la API XML de Scala:
import scala.xml._
val snippet = {
val x = <input type=''radio''
name={funcName}
value=''true'' />
if( cond ) {
x % new UnprefixedAttribute("checked","checked",Null)
} else x
}
Option
también funciona, 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>