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

Поддерживает ли Playframework 2.0.x <else if> в шаблонах

Интересно, поддерживает ли проигрыватель 2.0.3 и выше else if в представлениях? Я только читаю, что нужно писать так: if {...}else{if{...}else{...}} не могу поверить в это.

4b9b3361

Ответ 1

Я использовал @перед вторым, если:

@if (true) {
...
} else { @if (true) {
...
} else {
...
}}

Ответ 2

Я также смог получить

@{if (true) "foo" else if (true) "bar" else "baz"}

работать. Имейте в виду, что большинство языков программирования не поддерживают "else if" в качестве лексического токена. Это отдельные команды. Блок кода, выполняемый командой "else", является оператором "if".

Обратите внимание, что вы можете смешать XHTML с предложением:

 @{if (true) <b>foo</b> else if (false) "bar" else "baz"}

Я согласен с biesior, что, как правило, хорошая идея вставить логику состояния в контроллер, тогда у вас могут быть разные представления для разных состояний, причем общие компоненты имеют свои собственные под-представления.

Ответ 3

Ответ @Todd Flanders правильный. В обертке @{} вы можете написать свой обычный Scala код. Пример

@{
  if (profile.sex == 0) {
    <p class="col-md-6">Other</p>
  } else if (profile.sex == 1) {
    <p class="col-md-6">Male</p>
  } else {
    <p class="col-md-6">Female</p>
  }
}

Ответ 4

Нет, это не так. Он позволяет использовать только if(condition) {then...} else {otherwise...}

Для получения дополнительных возможностей вам нужно использовать Match Matching (аналогично PHP switch())

В этом случае _ является параметром по умолчанию.

Образец из предыдущей версии Play Autheticate (теперь то же самое происходит с отражениями в контроллере)

@(url: String, token: String, name: String)

@defining(lang().code) { langcode =>

    @langcode match {
        case "de" => {@_password_reset_de(url,token,name)}
        case "pl" => {@_password_reset_pl(url,token,name)}
        case _ => {@_password_reset_en(url,token,name)}
    }

}

Итак, может быть, лучший вариант для вас - это разрешение условия в контроллере и передача его в качестве параметра для представления?

Ответ 6

Вы можете использовать switch statement в Scala для его достижения.
Пример:

if(x>2){
   <block 1>

} else if(x>0) {
   <block 2>

} else {
   <block 3>
}

Перевод:

x match {
   case x if(x>2) => {<block 1>}
   case x if(x>0) => {<block 2>}
   case _ => {<block 3>}
}

Надежда может помочь вам в некоторых случаях, и надеюсь, что игровая платформа вскоре поддержит else if.

Ответ 7

Теперь if else if поддерживается в последней playframework. Обсуждение здесь https://github.com/playframework/twirl/issues/33

Вы можете использовать следующее:

@if(something) {
  ...
} else if (somethingElse) {
  ...
} else {
  ...
}