2. Listener 모니터 시스템

2529 단어 디자인 모드UI
GXT 의 Listener 는 관찰자 모드 를 사용 합 니 다.
그래서 꼭대기 층 에 인터페이스 가 있 습 니 다. com. extjs. gxt. ui. client. event. Observable 은 관찰 자 를 대표 합 니 다.
부분 코드 보 여주 기:

public interface Observable {

  public void addListener(EventType eventType, Listener<? extends BaseEvent> listener);

  public boolean fireEvent(EventType eventType, BaseEvent be);

  public List<Listener<? extends BaseEvent>> getListeners(EventType eventType);
  
  public boolean hasListeners();
  
  public boolean hasListeners(EventType eventType);

  public void removeListener(EventType eventType, Listener<? extends BaseEvent> listener);
}

BaseObservable 클래스 가 이 인 터 페 이 스 를 실현 하 였 습 니 다.
우 리 는 일부 중요 한 코드 를 캡 처 하여 분석 해 보 자.

public class BaseObservable implements Observable {
  //        ,   false,           
  private boolean firesEvents = true;
  //         
  private Map<String, List<Listener<BaseEvent>>> listeners;
  //         
  private boolean activeEvent;
  //                 !
  public boolean fireEvent(EventType eventType, BaseEvent be) {
    if (firesEvents && listeners != null) {
      activeEvent = true;
      be.setType(eventType);

      List<Listener<BaseEvent>> list = listeners.get(getKey(eventType));
      if (list != null) {
        List<Listener<BaseEvent>> copy = new ArrayList<Listener<BaseEvent>>(list);
        for (Listener<BaseEvent> l : copy) {
          callListener(l, be);//①          
        }
      }
      activeEvent = false;
      return !be.isCancelled();//②               
    }
    return true;
  }
}

fireEvent 방법 은 사건 을 촉발 시 키 고 자신의 listeners 가 event Type 사건 을 감청 하고 있 는 지 판단 하 며 있 으 면 이 listener 로 하여 금 이 사건 을 처리 하 게 합 니 다.
처리 하기 전에 activeEvent = true 를 설정 하면 처리 중 임 을 표시 하고 처리 가 끝 난 후에 activeEvent = false 를 설정 하면 처리 가 끝 났 음 을 표시 합 니 다.
처리 가 끝 났 을 때 돌아 오 는 것 은:!be.isCancelled()
이 사건 을 취소 해 야 하 는 지 여 부 를 표시 합 니 다.
왜 이런 디자인 이 있 을까요?
listener ① 이 사건 을 처리 할 때 이 사건 을 취소 하고 후속 처 리 를 중단 하려 고 하기 때문이다.그러면 be. setCanceled (true) 를 설정 할 수 있 습 니 다.
이때 돌아 오 는 ②!be. isCanceled () 는 false 입 니 다.
외부 에서 fireEvent 방법 을 호출 하 는 프로그램 은 false 의 반환 값 을 얻 었 습 니 다. 이벤트 가 취소 되 었 음 을 알 고 다음 단 계 를 계속 호출 하지 않 습 니 다.

좋은 웹페이지 즐겨찾기