2011-04-20 6 views
0

저는 (이전 글을 읽은 사람들은) "ICEFaces 웹 어플리케이션에서 작업하고 있습니다. 자바 스크립트 클래스에서 메서드 확장하기

이 질문에

는 ICEFaces

나는 특히 ToolTipPanelPopup에, ICEFaces 자바 스크립트 프레임 워크에 의해 생성 된 클래스의 동작을 확장해야

에 대해 잘 모르는 경우 등 읽기, 일반 자바 스크립트 질문으로 해석 될 수있다.

나는 라이브러리의 소스 코드를 수정할 수 없다 (그렇지 않으면 내 목표를 달성했을 것이다). 이것은 ICEFaces가 클래스를 정의하는 방법입니다 (jQuery 및 기타 Javascript 프레임 워크와 매우 유사 함).

ToolTipPanelPopup = Class.create({ 
    [...] 
    showPopup: function() { 
    [...] 
    }, 


    updateCordinate: function(event) { 
    [...] 
    }, 

    [...] 
}); 

내 질문

가 어떻게 그것의 끝에서 내 사용자 지정 기능을 실행하기 위해 showPopup() 함수의 동작을 확장 할 매우 간단합니다?

var original = ToolTipPanel.showPopup; 
ToolTipPanel.showPopup = function() { 
    original(); //this is kind of like the call to super.showPopup() 
    //your code 
}; 

내가 방화범이 사소한 예를 시도하고, 그것을 작동하는 것 같다 :

내가 상속을 가정한다 다음 Java 예제 코드 같은 것을 의미

public void ShowPopup() 
{ 
    super.ShowPopup(); 
    customMethod(); 
} 
+0

저는 Prototype에서 약간 녹슬었지만 (그러므로 이것은 답이 아닙니다), 저는 $ super가 Prototype에서 쓰고있는 것이라고 생각합니다. 나는 * 당신이 위의 코드를 '$ super'로 'super'로 사용할 수 있다고 생각한다. –

+0

귀하의 질문에 맞는 답변을 드릴 수 있습니다. 실험에 사용할 수있는 [jsFiddle] (http://jsfiddle.net/) 예제를 작성 하시겠습니까? 감사. – Paolo

답변

1

이런 식으로 뭔가 작업을해야합니다 :

var obj = { 
    func: function() { 
    console.log("foo"); 
    } 
}; 

obj.func(); 

var original = obj.func; 
obj.func = function() { 
    original(); 
    console.log("bar"); 
}; 

obj.func(); 

방화 광 출력 :

foo 
foo 
bar 

그래서 여기서 원래의 showPopup 기능에 대한 참조를 저장하고 있습니다. 그런 다음 클로저를 만들고이를 showPopup에 다시 지정합니다. 원래 showPopup은 아직까지도 original에 대한 참조가 있으므로 손실되지 않습니다. 클로저에서 original이 참조하는 함수를 호출하면 코드가 생깁니다. 먼저 무언가를하고 싶다면 전에 original으로 전화하십시오. 클로저를 사용하고 있으므로, original은 어휘 역동적으로 현재 범위에 바인딩되어 있으며 새 showPopup이 호출 될 때마다 사용할 수 있어야합니다. (제가 틀렸을 때 누군가 제게 정정 해주십시오).

내게 알려 주시면 알려드립니다.

+0

+1은 범용 문제의 정확성을 나타냅니다. 자, 내 문제는 현재 작업 환경에서 ToolTipPanelPopup 클래스가 보이지 않는다는 것입니다 (하지만 ICE 팝업을 열 수 있습니다). 조사하고 귀하의 조언을 기억하겠습니다. –

+0

@djechelon 현재 팝업을 여는 데 사용하는 메커니즘은 무엇입니까? 나는 ICEFaces에 익숙하지 않다. :) –

+0

먼저 JSPX 마크 업에서 내용이 채워진

관련 문제