加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex ModuleLoader和ModuleManager的区别、ModuleManager加载模

发布时间:2020-12-15 05:03:33 所属栏目:百科 来源:网络整理
导读:?????????????? 加载模块 简单来说有2种方式,一种是较为简单的使用 ModuleLoader ,另一种是使用 ModuleManager 。 ?????????????? 1.关于 ModuleLoader 的使用,请参见 Flex 使用ModuleLoader加载模块及卸载模块的实例 ?一文。 ???????????????2. ModuleMa


?????????????? 加载模块简单来说有2种方式,一种是较为简单的使用ModuleLoader,另一种是使用ModuleManager

?????????????? 1.关于ModuleLoader的使用,请参见Flex 使用ModuleLoader加载模块及卸载模块的实例?一文。

???????????????2.ModuleManager类提供了低层次的处理Module的装载卸载以及事件响应等的变成接口。这种方式比起纯粹的ModuleLoader方式稍微复杂一点,但是ModuleManager提供了比ModuleLoader更加强大的能力来管理Module模块的加载过程。

?????????????? ModuleManager类负责管理加载的模块。当public的ModuleLoader.loadModule和ModuleLoader.unloadModule方法被调用时,组件其实在内部与这个管理器进行通信。你可以用ActionScript直接访问ModuleManager管理的那些模块。当将模块的URL传递到public的ModuleManager.getModule方法中时,则该模块位置就被添加到被管理模块列表中,并返回一个mx.modules.IModuleInfo的实例。
模块本质上就是ModuleManager中private的ModuleInfo类的实例。ModuleInfo对象负责加载SWF文件,并被封装成一个实现了IModuleInfo接口的代理类,由ModuleManager.getModule方法返回。你可以监听这个代理类上的状态事件,以便更好地控制应用程序如何与加载的模块进行交互。

下面的例子使用了ModuleManager来控制将模块添加到容器中显示。

主文件:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   viewSourceURL="srcview/index.html">
	<s:layout>
		<s:VerticalLayout/>
	</s:layout>
	<fx:Script>
		<![CDATA[
			import mx.core.IVisualElement;
			import mx.events.ModuleEvent;
			import mx.modules.IModuleInfo;
			import mx.modules.ModuleManager;  
 			private var _moduleInfo:IModuleInfo;
 
 		  private function creationHandler():void 
  		 { 
			 _moduleInfo = ModuleManager.getModule("com/myflexhero/MyFlexHeroTest.swf"); 
	 		 _moduleInfo.addEventListener( ModuleEvent.READY,moduleLoadHandler ); 
			 _moduleInfo.addEventListener( ModuleEvent.PROGRESS,onModuleProgress);
	 		 _moduleInfo.load(); 
  		  }  
 		  private function moduleLoadHandler(event:ModuleEvent ):void 
 		  { 
			  BorderContainer.addElement( _moduleInfo.factory.create() as IVisualElement);
		  } 
 
		 protected function onModuleProgress (e:ModuleEvent) : void {    
			 label.text = "[MyFlexHero]:ModuleEvent.PROGRESS 当前已经加载了: " + e.bytesLoaded + " of " + e.bytesTotal + " loaded.";   
		 }  
 
		 ]]>
	</fx:Script> 
		<s:BorderContainer id="BorderContainer" width="500" height="200" />
		<s:Label id="label" text="[MyFlexHero]:"/>
		<s:Button label="点击加载" click="creationHandler()"/>
</s:Application>

副文件:
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:fx="http://ns.adobe.com/mxml/2009" 
		   xmlns:s="library://ns.adobe.com/flex/spark" 
		   xmlns:mx="library://ns.adobe.com/flex/mx" layout="absolute" width="100%" height="100%">
 
	<s:Panel title="MyFlexHeroTest">
		<s:Label text="我来自MyFlexHeroTest">
 
		</s:Label>
	</s:Panel>
</mx:Module>

下面列出了ModuleManager在加载模块时派发的事件,你可以根据需要监听这些事件并完成自定义事件操作

常量 字符串值 描述
PROGRESS "progress" 加载模块时被调度。你可以用这个事件

访问被加载模块的bytesLoaded和

bytesTotal属性。

SETUP "setup" 当已加载了足够的模块内容时被调度。
READY "ready" 当模块完成加载时被调度。
UNLOAD "unload" 当卸载模块时被调度。
ERROR "error" 当模块下载过程中出错时被调度。
常量 字符串值 描述
PROGRESS "progress" 加载模块时被调度。你可以用这个事件

访问被加载模块的bytesLoaded和

bytesTotal属性。

SETUP "setup" 当已加载了足够的模块内容时被调度。
READY "ready" 当模块完成加载时被调度。
UNLOAD "unload" 当卸载模块时被调度。
ERROR "error" 当模块下载过程中出错时被调度。
?

常量????????????????????? ? 字符串值???????????????????????????描述 PROGRESS?????? ?"progress"????????????????????????加载模块时被调度。你可以用这个事件访问被加载模块的bytesLoaded和bytesTotal??属性。??????????????????????????????? SETUP???????????? ? ? "setup"?????????????????????????????? 当已加载了足够的模块内容时被调度。 READY????????????? ? ?"ready"?????????????????????????????? 当模块完成加载时被调度。 UNLOAD???????? ?? ?"unload"??????????????????????????? ?当卸载模块时被调度。 ERROR???????????? ? "error"???????????????????????????????? 当模块下载过程中出错时被调度。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读