Ответ 1
Option
также работает, что уменьшает ненужное использование 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>
У меня есть следующий литерал XML:
<input type='radio'
name={funcName}
value='true' />
Я хотел бы включить checked='checked'
, если cond
истинно.
Я пробовал это,
<input type='radio'
name={funcName}
value='true'
{ if (cond) "checked='checked'" else "" } />
но это не сработает.
(Мне бы очень хотелось избежать повторения всего тега.)
Option
также работает, что уменьшает ненужное использование 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>
Если вы хотите добавить атрибут только при его проверке, вы можете добавить его после использования Scala XML API:
import scala.xml._
val snippet = {
val x = <input type='radio'
name={funcName}
value='true' />
if( cond ) {
x % new UnprefixedAttribute("checked","checked",Null)
} else x
}
Верьте или нет, вы можете сделать это вот так:
<input type='radio'
name={funcName}
value='true'
checked={ if (cond) "checked" else null } />
Это одна из темных частей Scala, где null
действительно используется.
Просто, чтобы уточнить, он делает именно то, что вы хотите: если cond
- false
, то input
не будет иметь атрибута checked
.