/ / In(Scala)Lift - Helpers.bindを使用するときにテンプレートから元のHTMLをレンダリングする方法 - テンプレート、scala、bind、lift、helpers

(Scala)Liftでは、Helpers.bindを使用するときに元のHTMLをテンプレートからレンダリングする方法 - テンプレート、スカラ、バインド、リフト、ヘルパー

私はScala / Liftの初心者で、各項目にオプションの「タグ」を付けてリストをレンダリングするのに問題があります。

私のHTMLテンプレートは言う

<lift:Items.list>
<e:name>Rock</e:name><br />
<e:warning><span style="color:#ff0000;">DANGER!</span></e:warning>
</lift:Items.list>

そしてItems.scala上で私は持っています

def list(node : NodeSeq) : NodeSeq = {

getItems flatMap( it => {

Helpers.bind("e", node,
"name" -> { Text(it.name) },
"warning" -> {
if (it.isDangerous) { <<INSERT HTML FROM TEMPLATE>> }
else { Text("") }
}
)
})
}

ある場合には、その内容を知りたい「e:warning」タグの説明がそのまま表示されます。 「ノード」からそれらを抽出する簡単な方法は「確かにある」と確信しています、しかし私はどうしても理解することができないので私が私のLift知識にいくつかの大きなギャップがあると思います。 誰かが私に適切な手順を指摘することができれば私は非常に感謝する必要があります。


答え: アドバイスありがとう。私は自分のコードを次のように構築しました。

    "warning" -> { (n : NodeSeq) => {
if (it.isDangerous) { n } else { Text("") }
}}

回答:

回答№1は1

関数をノードの名前にバインドするだけで、 NodeSeq を返します。 NodeSeq.

例えば。:

def warning(in: NodeSeq): NodeSeq = doSomethingWith(in)

// ...

Helpers.bind("e", node, "warning" -> warning _)

のコンテンツ <e:warning> その後、ノードは変換されて挿入されます。


回答№2の場合は0

私があなたがやろうとしていることの目的についてはよくわからない。どちらかを表示したい場合は、chooseTemplateとBoxを使う。