1

Play .scala.html テンプレートの 1 つに次のコードがあります。

@formats.map(format => {
  <div id="@format">
    {format}
  </div>
})

formatsSeq列挙型です。適切な「フォーマット」コンテンツ (それぞれに異なるフォーマット文字列が含まれる) で 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 が原因で変数名として「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 に答える