2010-12-18 4 views
0

저는 스칼라/리프트 초보자이며 각 항목에 선택적 "태그"가있는 목록을 렌더링하는 데 문제가 있습니다. "경고 전자"In (Scala) Lift, Helpers.bind를 사용할 때 템플릿에서 원본 HTML을 렌더링하는 방법

내 HTML 템플릿은 내가, 어떤 경우에는,의 내용을 가지고 내가 좋아하는 것

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("") } 
         } 
       ) 
    }) 
} 

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

그리고 Items.scala에 말한다 태그는 그대로 표현됩니다. "노드"에서 추출 할 수있는 쉬운 방법이있을 것이라고 확신합니다. 그러나 어떻게되는지 파악할 수 없기 때문에 리프트 지식에 큰 차이가 있다고 생각합니다. 누군가가 나에게 적절한 절차를 지적 할 수 있다면 나는 매우 감사 할 것이다.


대답 : 고마워. 나는 다음과 같이 코드를 구조화했다.

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

가능한 복제본 : http://stackoverflow.com/questions/4404111 – Debilski

답변

1

NodeSeq을 사용하는 노드 이름에 함수를 간단히 바인드하고 NodeSeq을 반환 할 수 있습니다.

예컨대 : <e:warning> 노드

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

// ... 

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

내용물을 변형 삽입한다.

0

나는 당신이하려고하는 목적을 잘 모른다. 한 가지 또는 다른 것을 표시하려면 템플릿 선택 및 상자를 사용하십시오.