1.Event 事件系统
文章分类:Web前端 要说GXT里面的事件Event,就必须先了解一下GWT提供的事件系统
GWT中基础的事件类是:com.google.gwt.user.client.Event
在这里GWT给我们提供了浏览器原生的20种左右的事件,每一个事件都用一个Int整数类型表示
如:
- /**
- * Fired when the user clicks on an element.
- */
- public static final int ONCLICK = 0x00001 ;
/**
* Fired when the user clicks on an element.
*/
public static final int ONCLICK = 0x00001;
GWT只提供了原生的事件,实际GXT中需要很多的自定义事件,GXT是如何扩展事件系统的呢?
GXT中创建了一个:com.extjs.gxt.ui.client.event.EventType 类,通过创建这个类的实例来表示一种事件(对比GWT中是用int整数来表示一种事件)。GWT中通过int类型来区别不同的事件,而GXT的 EventType则是通过比较内存地址来判断是否为不同的事件。
com.extjs.gxt.ui.client.event.Events 类列出了GXT提供的所有事件类型,截取片段代码如下:
- /**
- * Defines the GXT event types.
- */
- public class Events {
- /**
- * Activate event type.
- */
- public static final EventType Activate = new EventType();
- /**
- * Add event type.
- */
- public static final EventType Add = new EventType();
- /**
- * Adopt event type.
- */
- public static final EventType Adopt = new EventType();
/**
* Defines the GXT event types.
*/
public class Events {
/**
* Activate event type.
*/
public static final EventType Activate = new EventType();
/**
* Add event type.
*/
public static final EventType Add = new EventType();
/**
* Adopt event type.
*/
public static final EventType Adopt = new EventType();
因为这些事件类型是带有逻辑的自定义的事件,数量上远远大于浏览器的原生事件。目前GXT2.1的事件就达到145种,未来应该还会添加!
这样说来GXT与GWT采用了2套事件系统,会不会有冲突呢?
比如GWT捕获到一个Event.ONCLICK的单击事件,通知给GXT,因为这是一个int数据,而GXT识别的是EventType类型的事件,GXT如何来识别GWT的事件并转化为自己能够认识的EventType事件呢?
解决方法是GXT将GWT提供的原生事件与GXT中的事件进行了绑定。参考代码:
- private static Map<String, EventType> browserEvents = new FastMap<EventType>();
- static {
- browserEvents.put(String.valueOf(Event.ONBLUR), OnBlur);
- browserEvents.put(String.valueOf(Event.ONCHANGE), OnChange);
- browserEvents.put(String.valueOf(Event.ONCLICK), OnClick);
- browserEvents.put(String.valueOf(Event.ONCONTEXTMENU), OnContextMenu);
- browserEvents.put(String.valueOf(Event.ONDBLCLICK), OnDoubleClick);
- browserEvents.put(String.valueOf(Event.ONERROR), OnError);
- browserEvents.put(String.valueOf(Event.ONFOCUS), OnFocus);
- browserEvents.put(String.valueOf(Event.ONKEYDOWN), OnKeyDown);
- browserEvents.put(String.valueOf(Event.ONKEYPRESS), OnKeyPress);
- browserEvents.put(String.valueOf(Event.ONKEYUP), OnKeyUp);
- browserEvents.put(String.valueOf(Event.ONLOAD), OnLoad);
- browserEvents.put(String.valueOf(Event.ONLOSECAPTURE), OnLoseCapture);
- browserEvents.put(String.valueOf(Event.ONMOUSEDOWN), OnMouseDown);
- browserEvents.put(String.valueOf(Event.ONMOUSEUP), OnMouseUp);
- browserEvents.put(String.valueOf(Event.ONMOUSEOVER), OnMouseOver);
- browserEvents.put(String.valueOf(Event.ONMOUSEOUT), OnMouseOut);
- browserEvents.put(String.valueOf(Event.ONMOUSEMOVE), OnMouseMove);
- browserEvents.put(String.valueOf(Event.ONMOUSEWHEEL), OnMouseWheel);
- browserEvents.put(String.valueOf(Event.ONPASTE), OnPaste);
- browserEvents.put(String.valueOf(Event.ONSCROLL), OnScroll);
- }
private static Map<String, EventType> browserEvents = new FastMap<EventType>();
static {
browserEvents.put(String.valueOf(Event.ONBLUR), OnBlur);
browserEvents.put(String.valueOf(Event.ONCHANGE), OnChange);
browserEvents.put(String.valueOf(Event.ONCLICK), OnClick);
browserEvents.put(String.valueOf(Event.ONCONTEXTMENU), OnContextMenu);
browserEvents.put(String.valueOf(Event.ONDBLCLICK), OnDoubleClick);
browserEvents.put(String.valueOf(Event.ONERROR), OnError);
browserEvents.put(String.valueOf(Event.ONFOCUS), OnFocus);
browserEvents.put(String.valueOf(Event.ONKEYDOWN), OnKeyDown);
browserEvents.put(String.valueOf(Event.ONKEYPRESS), OnKeyPress);
browserEvents.put(String.valueOf(Event.ONKEYUP), OnKeyUp);
browserEvents.put(String.valueOf(Event.ONLOAD), OnLoad);
browserEvents.put(String.valueOf(Event.ONLOSECAPTURE), OnLoseCapture);
browserEvents.put(String.valueOf(Event.ONMOUSEDOWN), OnMouseDown);
browserEvents.put(String.valueOf(Event.ONMOUSEUP), OnMouseUp);
browserEvents.put(String.valueOf(Event.ONMOUSEOVER), OnMouseOver);
browserEvents.put(String.valueOf(Event.ONMOUSEOUT), OnMouseOut);
browserEvents.put(String.valueOf(Event.ONMOUSEMOVE), OnMouseMove);
browserEvents.put(String.valueOf(Event.ONMOUSEWHEEL), OnMouseWheel);
browserEvents.put(String.valueOf(Event.ONPASTE), OnPaste);
browserEvents.put(String.valueOf(Event.ONSCROLL), OnScroll);
}
browserEvents 这个map对象绑定了GWT事件与GXT的EventType事件
当GXT接收到GWT传递过来的一个int类型的事件时,GXT会调用:
- public static EventType lookupBrowserEvent( int browserEventType) {
- EventType type = browserEvents.get(String.valueOf(browserEventType));
- assert type != null ;
- return type;
- }
public static EventType lookupBrowserEvent(int browserEventType) {
EventType type = browserEvents.get(String.valueOf(browserEventType));
assert type != null;
return type;
}
方法来查找对应的EventType事件,找到后以自己的一套事件系统来传递和处理这个事件