| protected function getClass(p_name : String) : Class { try { return ApplicationDomain.currentDomain.getDefinition(p_name) as Class; } catch (p_e : ReferenceError) { trace("定义 " + p_name + " 不存在"); return null; } return null; } |
登录模块获取库中的界面元素,并在点击按钮后抛出事件。Event类不允许带参数,必须使用继承Event的自定义事件抛出参数。主程序可以把模块的自定义事件也编译进去(这样就增大了整个程序的文件尺寸),或者让监听模块事件的函数接受一个Objcet参数,以获取其动态参数。
CODE:
| private function onLogin(p_e : Object) : void { this.m_userName = p_e.userName; var login : IModule = p_e.currentTarget; login.removeEventListener("login", this.onLogin); login.dispose(); this.loadSwf(); } |
主程序收到事件之后卸载注册模块,加载“结果模块”到子域,并将登录模块传出的”userName”参数传给结果模块。
|
public function show(p_parent : DisplayObjectContainer, ... rest) : void
{ var libClass : Class = this.getClass("net.eidiot.appDomainDemo.Libaray"); if (libClass != null) this.initUi(libClass, rest); } override protected function initUi(p_libClass : Class, p_rest : Array = null) : void { this.addUi(this.getClass(p_libClass.BG_NAME), "结果"); var resultFunc : Function = p_libClass.getResult; var userName : String = p_rest[0]; this.addChild(resultFunc(userName)); } |
注意initUi()方法分别使用了共享库中Libaray类的静态属性BG_NAME和静态方法getResult()。但是直接调用此方法会报错,可以先用 resultFunc 变量取出此方法。详细内容请参考 源代码。
admin#flashas.net (#为@) 联系QQ:
:40777822
浙ICP备06033001号