在Play Framework模板中使用JavaScript中的花括号

时间:2012-07-19 16:44:01

标签: templates scala playframework-2.0

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

@titles:List[String]

我想循环生成一些html标题,其中{mmm}出现在:

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

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

或者是否有更惯用的方法来生成不涉及映射列表的HTML?对此非常陌生!

4 个答案:

答案 0 :(得分:4)

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

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

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

获取<h1>Whatever Title {mmm}</hq>等等。

答案 1 :(得分:3)

特拉维斯的答案证明了一种可能性(因为你要求)并且这是正确的。另一方面,你也可以遇到其他情况,你需要记住其他技巧:

例如将失败

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

答案 2 :(得分:3)

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

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

结果:

{ for left curly brace
} for right curly brace

答案 3 :(得分:1)

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

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

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

我的印象是,除非括号匹配(即每个} {),否 模板编译失败,所以也许@RightBracket是插入单个}的唯一方法?这在你需要写的时候很有用:

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

: - }