40

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

4

7 回答 7

34

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

@if (true) {
...
} else { @if (true) {
...
} else {
...
}}
于 2013-08-05T14:04:25.860 回答
28

@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>
  }
}
于 2015-04-06T13:41:52.863 回答
16

我也能够得到

@{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 的观点,将状态逻辑推送到控制器中通常是个好主意,然后您可以为不同的状态提供不同的视图,共享组件具有自己的子视图。

于 2012-12-29T06:10:40.583 回答
10

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

要获得更多可能性,您需要使用模式匹配(类似于 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)}
    }

}

因此,也许对您来说最好的选择是解决控制器中的条件并将其作为参数传递给视图?

于 2012-12-28T19:41:09.917 回答
3

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

你可以这样使用:

@if(something) {
  ...
} else if (somethingElse) {
  ...
} else {
  ...
}
于 2017-02-10T10:11:38.607 回答
1

您可以使用switch statementinScala来实现它。
例子:

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尽快支持。

于 2013-12-17T07:18:35.767 回答
1

不,scala 模板不支持“else if”:Play framework 2.0 是否支持模板中的嵌套 if 语句?

您可以使用模式匹配,也可以将 if 放入 else 中。

于 2012-12-29T07:40:26.893 回答