5

我已经传递了我从控制器传递的标题列表:

@titles:List[String]

我想循环生成一些带有 {mmm} 的 html 标题:

@titles.map { title =>
  <h1>{title} {mmm}</h1>
}

显然有一个问题,因为它会尝试找到一个名为 mmm 的变量。如何逃脱括号?

还是有一种更惯用的方式来生成不涉及映射列表的 HTML?对此非常新!

4

4 回答 4

4

您不需要在 Play 中转义大括号——与 Scala 的 XML 文字不同,它们在 Play 模板中没有任何特殊含义,除了@.

您应该能够编写以下内容:

@titles.map { title =>
  <h1>@{title} {mmm}</h1>
}

并得到<h1>Whatever Title {mmm}</hq>等。

于 2012-07-19T17:01:35.700 回答
3

Travis 的回答展示了一种可能性(对于您所要求的),它是正确的。另一方面,您也可以遇到其他情况,您需要记住其他技巧:

例如,这将失败

@for(title <- titles){
    Title: @title {mmm} <br/>
}

但这会起作用(感谢特拉维斯)

@for(title <- titles) { 
    Title: @{title} {mmm} <br/> 
}

这也将起作用

@for(title <- titles){
    Title: @title - <b>something else without bracets</b> <br/>
}

选择

或者,您可以在模型中创建示例toBrackets()方法并在模板中调用它(Java 示例)

public String toBrackets(String string) {
    return "{" + string + "}";
}

在模板中:

@for(title <- titles){
    Title: @title @title.toBrackets("mmm") <br/>
}
于 2012-07-19T17:53:38.417 回答
3

如果它不是 JS 或其他代码的一部分,并且只是用于呈现在视图中,那么我们可以使用 HTML entitles

&#123; for left curly brace
&#125; for right curly brace

结果:

{ for left curly brace
} for right curly brace
于 2014-11-11T13:56:15.370 回答
1

您可以创建变量@LeftBracket={@RightBracket= },然后这应该可以工作:

@titles.map { title =>
  <h1>{title} @{LeftBracket}mmm@RightBracket</h1>
}

与您的问题有些相关的旁注:

我的印象是,除非括号匹配(即}每个都匹配一个{),否则
模板编译会失败,所以也许@RightBracket是插入单个}? 如果您需要编写以下代码,这将很有用:

@titles.map { title =>
   hello :-}
}

:-}

于 2012-10-10T08:29:48.373 回答