Flex load modules READY 事件不触发问题

      如 http://archive.cnblogs.com/a/2234982/ 所说, 在使用ModuleLoader加载器;和使用ModuleManager进行加载flex模块时,必须要把对应的变量定义为全局变量, 否则其READY事件不会触发。

      参考过很多资料, 归其根本是由于在加载器调用了load方法后, 如果变量未定义为全局变量,那么可能被flxe的gc机制给卸载掉,也即根本的解决方法是不然加载器被gc,即要使用时必须留有应用。由于开始没明白其中道理,犯了个错误。如代码:

public class TaskLoadModule
	{
		public function TaskLoadModule()
		{
			super();
		}
		protected var moduleInfo:IModuleInfo
		public function loadFromLocal($local:String):void{
			moduleInfo = ModuleManager.getModule(local);
			moduleInfo.addEventListener(ModuleEvent.READY,moduleInfoReadyHandler);
			moduleInfo.addEventListener(ModuleEvent.ERROR,moduleInfoErrorHandler);
			moduleInfo.addEventListener(ModuleEvent.PROGRESS,moduleProgressHandler);
			trace('Module start load');
			moduleInfo.load();
		}
		public function moduleProgressHandler($e:ModuleEvent):void{
			trace('Module load progress: '+$e.bytesLoaded+" / "+$e.bytesTotal);
		}
		public function moduleInfoReadyHandler($e:ModuleEvent):void{
			trace('Module load ready: '+local);
		}
		public function moduleInfoErrorHandler($e:ModuleEvent):void{
			trace($e.errorText);
		}
	}

 

    如上定义的moduleInfo在类中确实为全局变量,但是我在页面中引用的代码却是如下:

   

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
					   xmlns:s="library://ns.adobe.com/flex/spark"   
					   xmlns:mx="library://ns.adobe.com/flex/mx"  >
	<fx:Script>
		<![CDATA[

			protected function button1_clickHandler(event:MouseEvent):void
			{
				var load:TaskLoadModule=new TaskLoadModule();
				load.load("module/TestModule.swf",null);
			}

		]]>
	</fx:Script>
	<s:Button x="205" y="0" label="按钮" click="button1_clickHandler(event)"  />
</s:WindowedApplication>

    这样就出现了,在click事件执行完成后,TaskLoadModule也会被gc,相应的moduleInfo也被gc掉了,所以一直未触发moduleInfo的Ready事件。

     记下错误,以便以后不再出这样的笑话

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值