web-dev-qa-db-fra.com

Playframework 2.0.x prend-il en charge <else if> dans les modèles

Je me demande si le jeu 2.0.3 et supérieur prend en charge else if dans les vues? Je lis seulement que l'on doit coder de cette façon: if {...}else{if{...}else{...}} ne peut pas croire cela.

38
Sven Malvik

J'ai utilisé un @ avant le second si:

@if (true) {
...
} else { @if (true) {
...
} else {
...
}}
33
Mar Cnu

La réponse de @Todd Flanders est juste. Dans un wrapper @ {}, vous pouvez écrire votre code normal Scala. Exemple

@{
  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>
  }
}
26
Xuân-Lợi Vũ

J'ai également pu obtenir

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

travailler. Gardez à l'esprit que la plupart des langages de programmation ne prennent pas en charge "else if" comme jeton lexical. Ce sont des commandes distinctes. Le bloc de code exécuté par la commande "else" se trouve être une instruction "if".

Notez également que vous pouvez mélanger XHTML avec la clause:

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

Je suis d'accord avec biesior que c'est généralement une bonne idée de pousser la logique d'état dans le contrôleur, alors vous pouvez avoir différentes vues pour différents états, avec des composants partagés ayant leurs propres sous-vues.

15
Todd Flanders

Non, non. Il vous permet uniquement pour if(condition) {then...} else {otherwise...}

Pour plus de possibilités, vous devez utiliser Pattern Matching (similaire à switch()) de PHP

Dans ce cas _ est une option par défaut.

Échantillon de la version précédente de Play Autheticate (maintenant la même chose se fait avec les réflexions dans le contrôleur)

@(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)}
    }

}

Alors peut-être que la meilleure option pour vous sera de résoudre la condition dans le contrôleur et de la passer en paramètre à la vue?

10
biesior

Maintenant if else if est pris en charge dans le dernier cadre de jeu. La discussion est ici https://github.com/playframework/twirl/issues/

Vous pouvez utiliser comme ceci:

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

Non, "else if" n'est pas pris en charge dans scala templates: Play Framework 2.0 prend-il en charge les instructions imbriquées if dans le modèle?

Vous pouvez utiliser la correspondance de motifs ou vous pouvez la mettre à l'intérieur.

1
user1411778