Flex Sample View的启动过程
AppEvent是自定义事件,EventBus单件模式了一个AppEvent对象,而SiteContainer又代理模式了EventBus的对象和所有方法,定义使用事件dispatchEvent
public static function dispatchEvent(event:Event):Boolean
{
var eventBase:EventBus = EventBus.getInstance();
return eventBase.dispatchEvent(event);
}
下面都是定义在SiteContainer中的类, 调用的顺序如下。其中AS类的构造函数最先被调用,然后是自定义组件的creationComplete ="init()"执行,最后执行SiteContainer的init函数,发出SiteContainer.dispatch(SiteContainer.CONTAINER_INITIALIZED);广播事件CONTAINER_INITIALIZED,
public var configManager:ConfigManager; AS类 1
public var uiManager:UIManager; AS类 2
public var controller:Controller; 自定义组件 4
public var mapManager:MapManager; 自定义组件 5
public var widgetManager:WidgetManagerDocked; 自定义组件 6
public var dataManager:DataManager; AS类 3
private static var _container:SiteContainer; 自定义组件 7
各个AS类和自定义组件中都添加了事件,如下:通过SiteContainer统一添加,又通过SiteContainer.dispatch(SiteContainer.CONTAINER_INITIALIZED);统一的触发。
SiteContainer.addEventListener(AppEvent.CONFIG_LOADED, config);
SiteContainer.addEventListener(AppEvent.SET_MAP_NAVIGATION, changeNavigationbyMenu);
SiteContainer.addEventListener(AppEvent.BASEMAP_MENU_CLICKED, basemapMenuClicked);
执行的顺序
SiteContainer.dispatch(SiteContainer.CONTAINER_INITIALIZED); SiteContainer自定义组件中
SiteContainer.dispatchEvent(new AppEvent(AppEvent.CONFIG_LOADED, false, false, configData)); ConfigManager类中,然后的CONFIG_LOADED事件在各个类和自定义组件中都有定义
SiteContainer.dispatchEvent(new AppEvent(AppEvent.MAP_LOADED, false, false, map)); MapManager自定义组件中,这个也有多个类和自定义组件定义
SiteContainer.dispatchEvent(new AppEvent(AppEvent.SET_STATUS, false, false, defaultstatus)); 在MapManager自定义组件中
SiteContainer.dispatchEvent(new AppEvent(AppEvent.LAYER_LOADED, false, false, null)); 也在MapManager自定义组件中
………………
剩下的事件就不说了,只要在Search-Reference中搜索整个工程找到dispatchEvent就知道了