2011-01-14 2 views
0

양식에 ajaxRadio가 있지만 Lift가 입력 태그를 스팬으로 감싸고 있고 태그에 태그를 지정하고 싶습니다. 이 입력 태그 주위에 레이블하지 스팬 될 것이라고, 어떻게 얻을 수 리프트 ajaxRadio를 기본 마크 업으로 변경하려면

object ChoiceHolder { 
    var htmlize: ChoiceItem[_] => NodeSeq = c => (<span>{c.xhtml} {c.key.toString}<br/> </span>) 
    } 

라고 방법 htmlize을 기본 toForm 기능을 무시하거나 정확하게 오버라이드 (override) 할 수 있습니까?

감사합니다.

답변

2

ChoiceItem

val choiceItem = ChoiceItem("Some key", <input type="radio" value="val" name="somename" />) 

같은임을 감안

ChoiceHolder(Seq(choiceItem)).toForm 

를 다음과 같이 당신은 당신이

,536,913처럼 뭔가를 반환 할 수 있습니다

ChoiceHolder.htmlize = ci => evalElemWithId((id, e) => e ++ <label for={id}>{ci.key.toString}</label>)(ci.xhtml) 

를 사용할 수있는 toForm 메소드를 호출 63,210

NodeSeq(<input name="somename" type="radio" value="val" id="F212153483008MMP"></input>, <label for="F212153483008MMP">Some key</label>) 

또는, 당신은 당신에게 복잡한

NodeSeq(<label for="F689721302326S3S"><input name="somename" type="radio" value="val" id="F689721302326S3S"></input>Some key</label>) 

비트 제공

ChoiceHolder.htmlize = ci => evalElemWithId((id, e) => <label for={id}>{e} {ci.key.toString}</label>)(ci.xhtml) 

주위에 라벨을 포장하려는 경우 : evalElemWithId (가져 오기 net.liftweb.util.Helpers.evalElemWithId을)를 NodeSeq의 첫 번째 요소 (소요 예 choiceItem.xhtml)에 추가하고 id 속성을 추가합니다. 그 다음이 id를받는 익명의 함수가 호출되어 라벨의 for 속성에서 사용할 수 있습니다.

편집 ChoiceHolder.htmlize 모든 ChoiceHolder.toForm 호출을 통해 호출되는 전역 함수의 종류입니다 참고. 따라서 어디서나 동일한 레이아웃을 원할 경우 전역 적으로 변경하는 것이 좋습니다.

하나의 경우에만 별개의 레이아웃을 만들고 싶다면 choiceToForm 메서드를 호출하는 것이 좋습니다.

+0

덕분에 도움을 많이하지만, 난 몰라 코드를 사용하는 방법을 알아야합니다. ChoiceHolder.htmlize를 사용하려고했지만 컴파일러가 evalElemWithId에 대해 알지 못한다고 경고합니다. 나는이 코드를 어디에 써야하는지 알 수 없다. 자신의 수업에? 새 개체를 만드시겠습니까? – kajo

+0

'import net.liftweb.util.Helpers.evalElemWithId' – Debilski

+0

@kajo : 죄송합니다. 실제로 오류가 발생했습니다.지금은 괜찮을 것입니다 ... – Debilski

1

결국 나는 혼자 해결책을 찾았습니다. 예상했던대로 깨끗하지는 않지만 작동합니다! 같은 문제와 미래 세대를위한 그래서

- 난 내 자신의 기능을 ajaxRadio 포장 :

choicesToMyForm(SHtml.ajaxRadio(...)) 

이 기능은 다음과 같습니다

def choicesToMyForm(choices : ChoiceHolder[String]) : NodeSeq = 
{ 
    choices.flatMap(c => (<label>{c.xhtml} {c.key.toString}</label>)) 
}