2010-05-19 5 views
0

Groovlet을 작성 중이며 HTML 빌더의 일부를 메소드에 위임하려고하지만 작동에 문제가 있습니다. 아래는 내가 가진 무엇 :건물에 메서드를 위임하려면 어떻게합니까?

def pages = [page1: html.p("page1")] 
html.html { 
    p("p") 
    pages[page1] 
} 

나는 다음과 같은 출력을 기대하고있다 :

<html> 
    <p>p</p> 
    <p>page1</p> 
</html> 

대신에 내가 무엇을 얻을 것은 다음과 같은 : 내가 잘못 뭐하는 거지

<p>text</p> 
<html> 
    <p>p</p> 
</html> 

? 하지만 같은 일을 할 기대 나는 문제의 빌더 지나치게 익숙하지 않다

답변

2

:

def pages = [page1: { p("page1") }] 
html.html { 
    p("p") 
    delegate.with pages[page1] 
} 

대신 pages[page1]은 물론, 당신은 어떤 폐쇄를 부를 수 또는 .&는 거라고 방법.

실행중인 클로저의 메서드 호출 (예 : p())이 실행중인 클로저의 대리자 (즉, HtmlBuilder)에 적용되도록 delegate.with이 필요합니다.

관련 문제