我想知道play 2.0.3及更高版本是否支持视图中的else if
语句? 我只看到必须这样编码:if {...}else{if{...}else{...}}
,但我不太相信。
我想知道play 2.0.3及更高版本是否支持视图中的else if
语句? 我只看到必须这样编码:if {...}else{if{...}else{...}}
,但我不太相信。
我在第二个if之前使用了@符号:
@if (true) {
...
} else { @if (true) {
...
} else {
...
}}
@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>
}
}
我也能够获得
@{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的观点,通常将状态逻辑推入控制器是一个好主意,这样您就可以为不同的状态使用不同的视图,共享组件具有自己的子视图。
不,它不允许你使用除了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)}
}
}
所以,也许对你来说最好的选择是在控制器中解决条件,并将其作为参数传递到视图中?
现在最新的playframework支持if else if
。相关讨论请参见https://github.com/playframework/twirl/issues/33
您可以像这样使用:
@if(something) {
...
} else if (somethingElse) {
...
} else {
...
}
2.5.14
,但仍无法编译(我复制了你的示例,并将条件替换为 true
,点号替换为 <br/>
)。或者我可能漏掉了什么? - icl7126if(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
。