Playframework 2.0.x是否支持模板</else>中的<else if =“”>

时间:2012-12-28 19:20:52

标签: playframework

我想知道在视图中播放2.0.3及更高版本是否支持else if?我只是读到必须以这种方式编码:if {...}else{if{...}else{...}}无法相信。

7 个答案:

答案 0 :(得分:32)

我在第二个之前使用过@ if:

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

答案 1 :(得分:23)

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

答案 2 :(得分:15)

我也能得到

@{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 :(得分:10)

不,它没有。它只允许您if(condition) {then...} else {otherwise...}

要获得更多可能性,您需要使用Pattern 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)}
    }

}

那么也许最好的选择是解析控制器中的条件并将其作为参数传递给视图?

答案 4 :(得分:3)

最新的playframework支持if else if。讨论在这里https://github.com/playframework/twirl/issues/33

您可以这样使用:

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

答案 5 :(得分:1)

不,scala模板中不支持“else if”:Does play framework 2.0 support nested if statement in template?

您可以使用模式匹配,也可以将if放在其他地方。

答案 6 :(得分:1)

您可以在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