考慮到ChoiceItem
是一樣的東西
val choiceItem = ChoiceItem("Some key", <input type="radio" value="val" name="somename" />)
,並調用toForm
方法如下
ChoiceHolder(Seq(choiceItem)).toForm
你可以使用
ChoiceHolder.htmlize = ci => evalElemWithId((id, e) => e ++ <label for={id}>{ci.key.toString}</label>)(ci.xhtml)
可能返回類似
NodeSeq(<input name="somename" type="radio" value="val" id="F212153483008MMP"></input>, <label for="F212153483008MMP">Some key</label>)
,或者,如果你想環繞
ChoiceHolder.htmlize = ci => evalElemWithId((id, e) => <label for={id}>{e} {ci.key.toString}</label>)(ci.xhtml)
,讓你
NodeSeq(<label for="F689721302326S3S"><input name="somename" type="radio" value="val" id="F689721302326S3S"></input>Some key</label>)
有點複雜標籤:evalElemWithId
(進口net.liftweb.util.Helpers.evalElemWithId
)採用NodeSeq
的第一個元素(例如choiceItem.xhtml),併爲其添加id
屬性。之後,匿名函數將被調用,它將接收此標識,以便您可以在標籤的for
屬性中使用它。
編輯 注意ChoiceHolder.htmlize
是怎樣的一個全球性的功能將通過所有ChoiceHolder.toForm
調用之前調用的。所以如果你想要在任何地方都有相同的佈局,那麼全局改變它就是有意義的。
如果你只是想在一種情況下有一個明確的佈局,你可能更好的只是調用一些choiceToForm
方法。
感謝很多幫助,但我不知道如何使用你的代碼。我試圖使用您的ChoiceHolder.htmlize,但編譯器警告我,它不知道evalElemWithId。我找不到寫這個代碼的地方。擁有課堂?創建新對象? – kajo 2011-01-15 10:56:10