2013-09-02 1 views
2

클래스에 클릭 처리기 메서드가 정의되어 있습니다. 화면의 취소 버튼을 클릭하면 특정 메소드를 호출하려고합니다.GWT clickHandler - 조건 실패

버튼을 클릭됩니다
boolean tempCheck; 

    @Override 
    protected void onBind() { 

    super.onBind(); 

    ... 
    ... 

    getViewName().getVar().addClickHandler(new ClickHandler() { 

    @Override 
    public void onClick(final ClickEvent event) { 

    //Doing some operation and making tempCheck true 

    tempCheck = true;  

    } 
    }); 


    If(tempCheck){ 

    this.box.getButtonName().addClickHandler(new ClickHandler() { 
     @Override 
     public void onClick(final ClickEvent event) { 

     this.box.hide(); 
     this.getViewName().hide(); 
    } 
    }); 

    } else { 


    this.callToMethodA(); 

    } 

} 

이 tempCheck 부울 변수가 참이 - 여기에 코드입니다.

tempCheck = true;

그러나 상태가 실패하면 항상 다른 부분으로 이동합니다.

(tempCheck) 만약

이런 일이 왜? 자바가 클로저를 관리하는 방법 때문인가요? 주 : this.callToMethodA()가 다른 클릭 핸들러에서도 사용되므로 조건이 블록 외부에 있어야합니다.

+0

만약 내가 틀렸어도 버튼을 클릭 한 후에 상자 /보기를 숨기고 싶다면, 맞습니까? – Sarajog

답변

3

addClickHandler()을 호출하면 처리기가 만들어지고 다음 문장 (이 경우 If(tempCheck))으로 즉시 계속됩니다. 당신이 생각하는 것처럼 그것은 버튼이 클릭 될 때까지 기다리지 않습니다. 따라서 tempCheck은이 시점에서 항상 거짓입니다.

단추를 클릭 한 후에 실행하려는 코드는 onClick() 메서드 또는 onClick()에서 호출하는 메서드 내부에 있어야합니다.

0

이벤트 처리에 대한 생각이 잘못되었습니다 ..... 닫기 버튼을 클릭 할 때 어느 쪽을 실행하든간에 onClick() 자체에 기능을 작성해야합니다 .하지만 여기에서는 무엇을하고 있습니까? 하나의 변수 값을 바꾸는 중입니다 ... 당신이하고 싶은 기능을 내부에서 수행하지 않고 있습니다. onClick() 나는 이해할 수 있기를 희망합니다 .... 이걸 이해하지 못했다고해도 .... 한번 생각해보십시오. 당신의 어리석은 실수를 알게되었습니다 ...