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