事件的创建,分发,监听,处理,思路都是很清晰的
事件可以自己继承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实例后,一切就好办了
方法虽笨,但是...简单易懂...
如果各位有更好的方法,请赐教