播放2.0模板 - 斯卡拉`match`和`val`不视图模板
问题描述:
编译我在玩2.0模板下面的代码:播放2.0模板 - 斯卡拉`match`和`val`不视图模板
@content.toString.lines.map{
case line => // i put `case` here as another attempt to make it work
line match {
case "" => @Html("")
case _ => <li>@Html(line)</li> /*CRASH*/
}
}
它失败的标记线,说not found: value line
。它的第二个变体:
@for(line <- content.toString.lines){
@line match { /*CRASH*/
case "" => @Html("")
case _ => <li>@Html(line)</li>
}
}
失败的标记线,声称'case' expected but identifier found
。
UPDATE:
同样的事情会为val
:
@val headID = "head"
配备了illegal start of simple expression
。
UPDATE完
我想知道,我究竟做错了,如何正确地实施Play的模板match-case
结构和val
分配?
答
使用模板
您需要在大括号括match
表达式(“{”和“}”)中的HTML内容你的模板:
@for(line <- content.toString.lines) {
@line match {
case "" => { }
case _ => { <li>@Html(line)</li> }
}
}
在特定情况下,下面的代码会读更好恕我直言:
@content.toString.lines.collect {
case line if !line.isEmpty => { <li>@Html(line)</li> }
}
个
定义值
您可以定义使用defining[T](value: T)(usage: T => Html)
帮手值:
@defining(1 + 2 * 3) { value =>
<div>@value</div>
}
答
以下似乎为我
@content.toString.lines.map{ line =>
line match {
case "" => @Html("")
case _ => <li>@Html(line)</li>
}
对眼睛
努力工作,但你可以看看在游戏项目目录target/scala-2.9.1/src_managed/main/views/html/index.template.scala
看到它在字符串中什么推杆。
至于VAL分配,我不知道,但@defining可以帮助
答
我发现,添加{}外括整个代码会工作
@{content.toString.lines.map{ line =>
line match {
case "" => @Html("")
case _ => <li>@Html(line)</li>
}}
答
的另一个常见原因这个错误是让起始大括号分开一行:
@x match {
case y =>
{ //offending brace, put it back on the same line as case
} //This can go anywhere
}
救生员!在一个小时之后,我发现这对我来说也适用。完全出乎意料,因为我在同一个项目中有其他文件,结构几乎相同,不需要这个,唯一可能的区别是我使用的参数字段被传递,而不是传递参数(@xf与@x)但是,我编辑的代码,并尝试直接传递参数,它仍然不会编译。我虽然可能是.xml而不是.html,那也没有什么不同。感谢你的回答! – Techmag 2015-06-19 16:27:48
在一个奇怪的例子里,我突然编译了一切 - 它是用(神奇治疗)包裹了大括号,然后当我删除它们时,新的错误消失了,但整个文件都干净地编译了。我很快地试图反驳我在过去几个小时左右所做的所有更改,看看我是否能够在这里找到真正的罪魁祸首,但无济于事。如果发生这种情况,我会建议深入挖掘,因为大括号掩盖了更深层次的问题。 – Techmag 2015-06-19 19:11:51