Playframework 2.0.x是否支持在模板中使用<else if>语句?

41

我想知道play 2.0.3及更高版本是否支持视图中的else if语句? 我只看到必须这样编码:if {...}else{if{...}else{...}},但我不太相信。


现在已经支持了。您需要使用最新的playframework。https://github.com/playframework/twirl/issues/33 - Ikrom
7个回答

35

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

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

5
对我来说,@if() 内部不能有空格。 - nkadwa
3
警告: "else" 必须与上一个闭合括号在同一行(是的...认真的,叹气...) - Adriano
1
@AdrienBe 哦,是的,这让我头晕了相当长一段时间。 - StoopidDonut

29

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

谢谢,这是最好的答案。为什么你们没有给这个答案投票呢? - azwar_akbar
我同意这是解决问题最明智的方案。 - Jae

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的观点,通常将状态逻辑推入控制器是一个好主意,这样您就可以为不同的状态使用不同的视图,共享组件具有自己的子视图。


10

不,它不允许你使用除了if(condition) {then...} else {otherwise...}之外的任何功能。

如果您想要更多的可能性,您需要使用Pattern Matching(类似于 PHP 的 switch()

在这种情况下,_是默认选项。

从以前版本的 Play Authenticate 中取样(现在在控制器中使用反射完成相同的操作)

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

}

所以,也许对你来说最好的选择是在控制器中解决条件,并将其作为参数传递到视图中?


3

你确定它已经发布了吗?我正在使用 2.5.14,但仍无法编译(我复制了你的示例,并将条件替换为 true,点号替换为 <br/>)。或者我可能漏掉了什么? - icl7126

1
你可以在Scala中使用switch语句来实现它。
示例:
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>}
}

希望能在某些情况下为您提供帮助,并希望Play框架尽快支持else if


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接