1

我的 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}>......没有引号!该死的。

4

3 回答 3

0

似乎存在名称冲突然后您使用“格式”作为变量名可能是因为 String.format,尝试使用不同的名称

@formats.map{f =>
<div id="@f">
    @f
</div>
}
于 2013-11-12T09:02:36.720 回答
0

据我所知,在新模板中声明新变量有一些限制,但您可以使用这样的解决方法:

@createDiv(format: String) = {
  <div id="@format">
    @format
  </div>
}

并在您的代码中使用它,如下所示:

@formats.map(format => {
  createDiv(format.toString)
})

这对我有用。希望这个解决方案适合你。

于 2013-11-12T07:44:41.160 回答
0

以下对我有用:

@{
    def createDiv(format: String) = {
        <div id={format}>
            {format}
        </div>
    }

    formats.map(format => {
        createDiv(format.toString)
    })
}

请注意封闭的@{ }块,并且 id 的部分周围没有引号<div id={format}>

更新:

我最终做了一些更干净的事情——我使用了一个单独的模板文件。代码现在看起来有点像这样:

@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>
于 2013-11-13T02:09:46.323 回答