1

これは非常に簡単ですが、改行を含む html タグの NodeSeq を出力するのに苦労しているとします (そのため、Web ブラウザーでソースを表示すると、上から下にスキャンできます)。

そのまま、NodeSeq は 1 つの長い行として出力されます。

コード例:

listOfPaths map ( jsNode(_) ) reduce (_++_)

def jsNode(path: String): NodeSeq =
  <script type="text/javascript" src={"/static/js/"+path}></script>

では、各ノードの最後に\nを取得するにはどうすればよいでしょうか?

ありがとう

4

1 に答える 1

4

これは、HTML のレンダリングに使用しているすべての作業です。たとえば、scala.xml.PrettyPrinterを使用している場合は、次のようにすることができます。

val printer = new xml.PrettyPrinter(80, 2)
val paths = List("script-1.js", "script-2.js")
val header = <head>{paths map ( jsNode(_) ) reduce (_++_)}</head>

を呼び出すとprinter.format(header)、次のようになります。

<head>
  <script type="text/javascript" src="/static/js/script-1.js"></script>
  <script type="text/javascript" src="/static/js/script-2.js"></script>
</head>

コンストラクターの最初の引数PrettyPrinterはページ幅を指定し、2 番目の引数はインデントするスペースの数を指定することに注意してください。

手早く汚いものが欲しい場合は、要素の間 (または後) にテキスト ノードをドロップできます。

paths map ( jsNode(_) ) reduce (_++ Text("\n") ++ _)

しかし、ほとんどの場合、他の解決策が望ましいです。

于 2012-04-16T22:49:19.953 に答える