2009-10-28 7 views
2

메서드의 동작을 덮어 쓸 수 있습니까 CreateLinkCreateLinkTo?** CreateLink ** 및 ** CreateLinkTo ** 메서드의 동작을 덮어 쓸 수 있습니까?

+0

어떤 행동을 무시하려고합니까? –

+0

생성 된 링크에 접두어를 추가하고 싶습니다. 접두사와 href의 반환 HTMLCodec 메서드를 작성하여 내 문제의 일부를 해결할 수 있습니다. 불행히도 SRC 속성을 사용하는 태그의 경우는 그렇지 않습니다. 지금까지 본 SRC는 CreateLink 또는 CreateLinkTo를 사용하여 생성되었습니다. 이 행동이 가능합니까? – Luixv

답변

2

메타 프로그래밍을 사용하여 ApplicationTaglib의 클로저를 대체 할 수 있습니다.

ApplicationTagLib.metaClass.getCreateLink = {-> 
    return {attrs-> 
     // your code here 
    } 
} 

나는 그것을 시도 적이 있지만 작동 할 수 있습니다 :

1

당신이해야 할 일은 자신이

class MyTabLib { 
    def createLink = {attrs, body -> 
    .... etc .... 
    } 

    def createLinkTo = {attrs, body -> 
    .... etc .... 
    } 

} 

Grails는 것, 즉 태그를 자신의 태그 라이브러리를 생성하고 정의입니다 먼저 taglib을 사용하십시오.

희망이 도움이됩니다!

+0

답장을 보내 주셔서 감사합니다. 이 태그 안의 원본 createLink를 호출하는 방법을 지정할 수 있습니까? 난 단지 생성 된 링크를 수정할 필요가 접두사를 추가합니다. (+1) – Luixv

+0

당신은 뭔가를 할 수 있어야합니다. def createLink = {attrs, body -> def apptag = new ApplicationTagLib() << << 접두사; out << apptag.createLink (attrs, body); } –

1

조금 늦었지만 위의 해결 방법은 나에게 적합하지 않았습니다. 그래도이 작업을 성공적으로 수행 할 수있었습니다.

public class MyTagLib extends ApplicationTagLib { 

    def oldResource 

    public MyTagLib() { 
    // save the old 'resource' value 
    oldResource = resource; 
    resource = staticResource; 
    } 

    def staticResource = { attrs -> 
    // dork with whatever you want here ... 
    // ... 
    out << oldResource(attrs); 
} 
} 

기본적으로 원래 태그를 확장하고 있습니다. 'resource'태그는 메서드의 메서드가 아닌 개체의 속성이기 때문에 실제로 재정의 할 수 있다고 생각하지 않습니다. 대신 원래 값을 저장하고 태그 요청을 변경 한 후에 호출하십시오.

+0

oh .. 'resource'태그를 재정의하고 있지만 'createLink'또는 'createLinkTo'(더 이상 사용되지 않는 'resource'태그) –

관련 문제