Подтвердить что ты не робот

Условно включить атрибут в XML-литерал

У меня есть следующий литерал XML:

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

Я хотел бы включить checked='checked', если cond истинно.

Я пробовал это,

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

но это не сработает.

(Мне бы очень хотелось избежать повторения всего тега.)

4b9b3361

Ответ 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>

Ответ 2

Если вы хотите добавить атрибут только при его проверке, вы можете добавить его после использования 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

}

Ответ 3

Верьте или нет, вы можете сделать это вот так:

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

Это одна из темных частей Scala, где null действительно используется.

Просто, чтобы уточнить, он делает именно то, что вы хотите: если cond - false, то input не будет иметь атрибута checked.