事件的创建,分发,监听,处理,思路都是很清晰的
事件可以自己继承Event类,然后加入属性存储处理所需参数
分发可以EventDispather分发
监听和处理也不是很难
现在的问题是,处理了事件之后,该如何改变视图?
比如登录模块是一个Module,用的是ModuleLoader加载
那么登录之后,怎么取得另一个Module改变视图?
或者改变主引用程序,切换State或者ViewStack?
我想了一下...也只能写下一下的代码了
方法其实很简单,就是Application.application,获取主应用程序实例
<mx:ViewStack x="{application.width / 2 - 475}" y="{application.height / 2 - 300}" id="mainView" width="950" height="600"> <!-- 登录模块 --> <mx:Canvas label="登录" width="100%" height="100%" showEffect="Fade" hideEffect="Fade"> <mx:ModuleLoader id="login" url="com/emavaj/testexam/view/Login.swf"/> </mx:Canvas> <!-- 注册模块 --> <mx:Canvas label="注册" width="100%" height="100%" showEffect="Fade" hideEffect="Fade"> <mx:ModuleLoader url="com/emavaj/testexam/view/Register.swf"/> </mx:Canvas> <!-- 后台模块 --> <mx:Canvas label="" width="100%" height="100%" showEffect="Fade" hideEffect="Fade"> <mx:ModuleLoader id="admin" url="com/emavaj/testexam/view/Admin.swf"/> </mx:Canvas> </mx:ViewStack>
上面代码是,主应用程序结构,登录模块Module如下:
<mx:Panel x="322.5" y="176" width="305" height="218" layout="absolute"> <mx:TextInput id="username" x="71" y="42"/> <mx:TextInput id="password" x="71" y="87" displayAsPassword="true"/> <mx:Label x="10" y="44" text="用户名:"/> <mx:Label x="24" y="89" text="密码:"/> <mx:Button x="219" y="141" label="登录" click="login()"/> <mx:Button x="155" y="141" label="注册" click="register()"/> </mx:Panel>
当点击登录时,执行login() 函数,派发事件,处理了之后,需要跳转到Admin这个Module上
只是,我写了一个查找视图的工具类:
package com.emavaj.testexam.util{ import mx.core.Application; /**. * 视图工具 */ public class ViewUtil{ /**单例对象.*/ private static var viewUtil:ViewUtil; /**获取后台视图.*/ public static function getAdminModule():Object { return Application.application.admin.child; } } }
其实是个伪类,全部是静态方法
核心代码是:
Application.application
这一句就是取得了整个应用程序实例
然后 .admin 是取得后台模块的 ModuleLoader对象
.child就是真正的后台模块的 Module实例了...
取得了Module实例后,一切就好办了
方法虽笨,但是...简单易懂...
如果各位有更好的方法,请赐教