我在Play .scala.html模板中有以下代码:
@formats.map(format => {
<div id="@format">
{format}
</div>
})
formats
是枚举的Seq
。使用正确的“格式”内容(每个包含不同的格式字符串)创建div,但是,永远不会正确设置ID。每个div的id字面设置为“@format”,如下所示:
<div id="@format">
OneOfTheFormats
</div>
<div id="@format">
AnotherFormat
</div>
我尝试过制作代码<div id="{format}">
,<div id={format}>
和<div id=@format>
但没有运气。这很奇怪,因为我在其他模板中做了类似的事情,但也许因为特殊的map
情况而无法正常工作......可能因为format
是一个创建的参数,而不是传递给模板?
更新
我试过以下内容,正如以下建议:
@{
def createDiv(f: String) = {
<div id="@f">
{f}
</div>
}
formats.map(f => {
createDiv(f.toString)
})
}
同样,格式正确地打印在里面 div中,但ID从未设置过。我开始认为这是不可能的。我还尝试了<div id="@f">
,<div id="{f}">
和<div id="@{f}">
但没有运气。奇怪的是,为了在div中打印格式,我必须使用{f}
,而不是@f
。还在这里挣扎......
更新2:
如果我执行以下操作,它会起作用:<div id={f}>
...没有引号!该死的。
答案 0 :(得分:0)
据我所知,在新模板中声明新变量有一些限制,但您可以使用这样的解决方法:
@createDiv(format: String) = {
<div id="@format">
@format
</div>
}
并在您的代码中使用它:
@formats.map(format => {
createDiv(format.toString)
})
这对我有用。希望这个解决方案适合你。
答案 1 :(得分:0)
似乎存在名称冲突然后您使用“format”作为变量名称可能是因为String.format,尝试使用不同的名称
@formats.map{f =>
<div id="@f">
@f
</div>
}
答案 2 :(得分:0)
以下对我有用:
@{
def createDiv(format: String) = {
<div id={format}>
{format}
</div>
}
formats.map(format => {
createDiv(format.toString)
})
}
请注意随附的@{ }
块,并且<div id={format}>
的ID部分周围没有引号。
<强>更新强>
我最终做了一些更清洁的事情 - 我使用了一个单独的模板文件。代码现在看起来有点像这样:
@formats.map(f => {
// do some other stuff
// render format subview
formatSubView(f, otherStuff)
})
子视图模板如下所示:
@(f: theFormatEnum,
otherStuff: lotsOfOtherStuff)
<div id="@f">
<img src="@{routes.Assets.at("images/" + f + ".png")}"/>
// etc, etc
</div>