Bedenkt man, dass die ChoiceItem
so etwas wie
ist
val choiceItem = ChoiceItem("Some key", <input type="radio" value="val" name="somename" />)
und rufen Sie die toForm
Methode als
ChoiceHolder(Seq(choiceItem)).toForm
folgt man
ChoiceHolder.htmlize = ci => evalElemWithId((id, e) => e ++ <label for={id}>{ci.key.toString}</label>)(ci.xhtml)
verwenden könnte, die so etwas wie
zurückkehren könnte
NodeSeq(<input name="somename" type="radio" value="val" id="F212153483008MMP"></input>, <label for="F212153483008MMP">Some key</label>)
oder, wenn Sie das Etikett um
ChoiceHolder.htmlize = ci => evalElemWithId((id, e) => <label for={id}>{e} {ci.key.toString}</label>)(ci.xhtml)
wickeln möchten, die Sie
NodeSeq(<label for="F689721302326S3S"><input name="somename" type="radio" value="val" id="F689721302326S3S"></input>Some key</label>)
etwas kompliziert gibt: evalElemWithId
(Import net.liftweb.util.Helpers.evalElemWithId
) nimmt das erste Element einer NodeSeq
(z.B choiceItem.xhtml) und fügt ein id
-Attribut hinzu. Danach wird die anonyme Funktion aufgerufen, die diese ID erhält, damit Sie sie im for
Attribut des Labels verwenden können.
bearbeiten Beachten Sie, dass ChoiceHolder.htmlize
Art einer globalen Funktion, die durch alle ChoiceHolder.toForm
Anrufe aufgerufen wird. Es macht also nur Sinn, sie global zu ändern, wenn Sie überall das gleiche Layout haben wollen.
Wenn Sie nur ein bestimmtes Layout in einem Fall haben möchten, ist es wahrscheinlich besser, rufen Sie einfach einige choiceToForm
Methode.
vielen Dank für die Hilfe, aber ich weiß nicht wissen, wie Sie Ihren Code verwenden. Ich habe versucht, Ihre ChoiceHolder.htmlize, aber Compiler warnt mich, dass es nicht über evalElemWithId weiß. Ich kann nicht herausfinden, wo ich diesen Code schreiben soll. Um Klasse zu besitzen? Neues Objekt erstellen? – kajo
'import net.liftweb.util.Helpers.evalElemWithId' – Debilski
@kajo: Sorry, ich habe tatsächlich einen Fehler gemacht.Sollte jetzt gut sein ... – Debilski