0

Play 2.0では、Scalaを使用して、htmlフラグメントを取得し、すべての行を<div>ブロック内に配置するファクトリを作成したいと思います。私は考えられるいくつかの方法を試しましたが、String / Htmlのタイプエラーが発生するか、ページにHTMLコードがテキストであるかのように書き込まれることが常に発生します。誰かがこれを行う方法を知っていますか?

アップデート:

私が見たいのは次のようなものです。

@factories.f_div_lines {
   <a href="/aabbcc"> abc </a>
   <a href="/ccbbdd"> cbd </a>
   <a href="/bbddee"> bde </a>
   <a href="/ddeeff"> def </a>
   <a href="/eeffgg"> efg </a>
}

そして、すべてのタグは's<a href>で囲まれます<div>

4

1 に答える 1

9

複数行の文字列を異なるに分割する場合はdiv、次のようなテンプレートを作成します。

@(message: String)

@for(line <- message.lines) {
  <div>@line</div>
}

PlayはHTMLコンテンツを自動的にエスケープするため、HTMLコンテンツが含まれている場合は、ループ内などmessageへの呼び出しを介してエスケープを無効にする必要があります。Html

<div>@Html(line)</div>

次のように呼び出します。

Ok(views.html.index("First\nSecond\nThird"))

反復のセクションにあるPlayガイドを参照してください。

UPDATE 次のコードはsplit_lines_in_divs、パラメーターを受け入れ、Htmlそれをオブジェクトに変換し、String上記と同じコードを適用するものを定義します。mainPlay!によって自動的に生成されるPlayの関数を使用したことに注意してください。新しいScalaプロジェクトを作成して、一般的なHTMLピースを提供するとき

@(message: String)

@split_lines_in_divs(the_html: Html) = {
  @for(line <- the_html.toString().lines) {
    <div>@Html(line)</div>
  }
}

@main("The title"){ 

  @split_lines_in_divs {
    <a href="test">Test</a>
    <a href="test2">Test2</a>
  }
}
于 2012-04-07T12:55:10.403 に答える