播放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> 
}} 
+0

救生员!在一个小时之后,我发现这对我来说也适用。完全出乎意料,因为我在同一个项目中有其他文件,结构几乎相同,不需要这个,唯一可能的区别是我使用的参数字段被传递,而不是传递参数(@xf与@x)但是,我编辑的代码,并尝试直接传递参数,它仍然不会编译。我虽然可能是.xml而不是.html,那也没有什么不同。感谢你的回答! – Techmag 2015-06-19 16:27:48

+0

在一个奇怪的例子里,我突然编译了一切 - 它是用(神奇治疗)包裹了大括号,然后当我删除它们时,新的错误消失了,但整个文件都干净地编译了。我很快地试图反驳我在过去几个小时左右所做的所有更改,看看我是否能够在这里找到真正的罪魁祸首,但无济于事。如果发生这种情况,我会建议深入挖掘,因为大括号掩盖了更深层次的问题。 – Techmag 2015-06-19 19:11:51

的另一个常见原因这个错误是让起始大括号分开一行:

@x match { 
case y => 
    { //offending brace, put it back on the same line as case 
    } //This can go anywhere 
}