Javascript客户端接口之SuperMap.Handler
作者:Hyacinth
接触过SuperMap iClient for Javascript的朋友,想必对SuperMap.Control—控件类都不会感到陌生吧。比如,开发过程中,经常使用的DrawFeature、Navigation、SelectFeature等。而接下来我们要讲的并非Control,而是Control的事件处理器–SuperMap.Handler。
SuperMap.Handler用于处理Control事件的事件处理器。 事件处理器(Handler)内部封装了浏览器事件监听及其相应的处理方法,当一个事件处理器被激活时, Handler中定义的浏览器事件监听及其相应的方法被注册到浏览器监听器,在浏览器事件被触发之后, 首先会调用Handler中处理该浏览器事件的方法来做事件的确认和信息封装,然后才再传递给Control等做具体响应处理。当一个处理器被注销,这些方法在事件监听器中也会相应的被取消注册。事件处理器通过 active和 deactive 两个方法,实现动态的激活和注销。一个控件被激活时,其对应的事件处理器会被激活, 相应的浏览器事件被触发之后,通过事件处理器(Handler)来监听、处理和响应这些事件; 同样,当一个控件被注销时,其相应的处理器也会被注销。 包括了Box、Click、Drag、Feature、Hover、Keyboard、 MouseWheel、Path、Pinch、Point、Polygon、RegularPolygon等几种类型的事件处理器。
这时你可能会说,能够想到比较易懂的控件可能会有哪些事件处理器,如DrawFeature,在初始化的时候就会定义Handler类型,而其他的就不太清楚了,类参考里也没有做详细的介绍,那怎么能够清楚的知道各个Control所对应的事件处理器类型呢?其实这个比较好解决,大家在做b/s开发时,都会通过浏览器的开发者工具(按F12键)来进行代码的调试,这里以firebug为例进行说明,你可在控制台里输入map.controls,获取到加载在地图上的所有控件,如下图所示
以此类推,其他的handler类型以及modify等回调函数都可以根据实际需求进行相应的编写。除此之外,你还可以根据自己的需求利用handler去自定义控件。