GXT中的MVC(2)

下面看看Controller的部分代码
  /**
   * Registers the event type.
   * 
   * @param types the event types
   */
  protected void registerEventTypes(EventType... types) {
    if (supportedEvents == null) {
      supportedEvents = new ArrayList<EventType>();
    }
    if (types != null) {
      for (EventType type : types) {
        if (!supportedEvents.contains(type)) {
          supportedEvents.add(type);
        }
      }
    }
  }
  /**
   * Determines if the controller can handle the particular event. Default
   * implementation checks against registered event types then queries all child
   * controllers.
   * 
   * @param event the event
   * @return <code>true</code> if event can be handled, <code>false</code>
   *         otherwise
   */
  public boolean canHandle(AppEvent event) {
    if (supportedEvents != null && supportedEvents.contains(event.getType())) return true;
    if (children != null) {
      for (Controller c : children) {
        if (c.canHandle(event)) return true;
      }
    }
    return false;
  }


这里有贴了2个方法,一个是registerEventTypes(),表示注册事件。
如果我们要对初始化事件INIT进行处理,我们要先注册这个事件registerEventTypes(INIT);
那么当这个事件发生时,Controller就会接收到,可以进行相应的处理.
canHandle这个方法就是判断能否处理的,当你注册INIT事件后,他会把这个INIT对象放进supportedEvents 里面,canHandle里面迭代这个集合,如果存在,返回true表示需要处理,如果不存在,返回false表示不需要处理。

回头再看之前的Dispatcher类里面的dispatch方法,他会迭代controllers这个集合,调用它们的canHandler()方法,如果需要处理,则调用controller的handleEvent方法来处理。
为了把我们自己的controller添加到Dispathcer的controllers里面,我们还需要调用以下方法:
  /**
   * Adds a controller.
   * 
   * @param controller the controller to be added
   */
  public void addController(Controller controller) {
    if (!controllers.contains(controller)) {
      controllers.add(controller);
    }
  }

Dispathcher.get().addController(controller);

你可能感兴趣的:(C++,c,mvc,C#)