FLEX在application之间传值-SharedObject
FLEX在application之间传值--SharedObject
通常,我们在做页面传值的时候,都是用TitleWindow弹出框进行传值,下面我给大家介绍一下,两个Application页面的跳转和传值,希望对正在学习Flex的朋友能有所帮助
情况一:在不同页面进行跳转:
传值方:
var so:SharedObject = SharedObject.getLocal("validate","/");
//validate是临时文件
so.data.validateResult = true;
so.data.number = 1;
//1是要传得值
so.flush();
var request:URLRequest = new URLRequest();
request.url = "bb.html";
//bb.html是要跳转的页
navigateToURL(request);
接受方:
var so:SharedObject = SharedObject.getLocal("validate","/");
var valid:Boolean = so.data.validateResult;
if( valid != true ){
so.clear();
}
else{
var number:String = so.data.number.toString();
this.text.text=number;
so.clear();
}
情况二:在本页面进行跳转:
传值方:
var so:SharedObject = SharedObject.getLocal("validate","/");
so.data.validateResult = true;
so.data.number = 1;
//1是要传得值
so.flush();
var request:URLRequest = new URLRequest("bb.html");
navigateToURL(request,"_self");
接受方:
var so:SharedObject = SharedObject.getLocal("validate","/");
var valid:Boolean = so.data.validateResult;
if( valid != true ){
so.clear();
}
else{
var number:String = so.data.number.toString();
this.text.text=number;
so.clear();
}
Flex Shared Object是一个类似于Cookies的东西,同来存储一些数据到用户本机。但它与Cookies又有些不同。
第一,Cookies过一段时间会过期,而它不会,除非你执行清除命令。
第二,存储的数据大小不能超过100KB,超过了,FlashPlayer会提示用户是否允许该存储操作。
第三,存储数据的位置和程序本身有关。
第四,它不会像Cookies那样在客户端和服务器端之间传递。
SharedObject类有以下几个方法:
1.clear(), 清除共享数据和文件。
2.flush(),立即写入共享文件到客户端。
3.getLocal(),获得共享数据文件,如果为空系统会自动新建一个共享文件到客户端。
4.getSize(),获得共享数据文件的大小,单位是bytes。
有两个属性:
1.data,代表着共享数据的数据集合。
2.onStatus,当共享数据发出警告、错误或其他信息时的事件。
主要看下面的这个方法:
SharedObject.getLocal(objectName [, localPath])
其中objectName是该共享对象的名字,localPath即共享对象所在路径。
// 创建一个本地保存数据的对象
var cookie:Object = SharedObject.getLocal("cookie");
方法会在默认的路径下生成一个cookie.sol文件。文件的默认大小不能超过100k,当然可以通过鼠标右击flash窗口,选择设置来管理或者禁用您的本地共享对象。可以让每个flash独立使用自己的SharedObject,当然也可以做一个全域的SharedObject让所有的swf使用,只要给localPath 赋值 "/"。
在win2k和 win xp中,默认路径为C:\Documents and Settings\username\Application Data\Macromedia\Flash Player\#SharedObjects (username为机器的用户名)
每个对象都会有一个只读属性data,用来存储被存储到“数据特性”中的对象的属性,这些属性可以共享/存储,每一个属性可以是各种基础数据类型(数组,数字布尔值等)对象。现在cookie已经存储在SharedObject中了,以后你可以通过对SharedObject数据属性的存取来实现对cookie的存取。例如:
cookie.data.name = "张三";
cookie.data.password = "123456";
cookie.data.rememberPassword = true;
共享对象的写入会在应用程序退出时自动执行,也可以通过cookie.flush()强制写入。
创建共享文件
public var mySO:SharedObject;
mySO = SharedObject.getLocal("preferences");
创建一个自定义路径的共享文件。
mySO = SharedObject.getLocal("preferences","/");
如果你希望让多个Flex程序共享此文件,可以用到此功能。
写共享数据到本地
public var currentUserName:String = "Reiner";
public var itemsArray:Array = new Array(101,346,483);
public var currentUserIsAdmin:Boolean = true;
mySO.data.userName = currentUserName;
mySO.data.itemNumbers = itemsArray;
mySO.data.adminPrivileges = currentUserIsAdmin;
mySO.flush();
注意:共享数据只支持简单数据类型,例如:int,uint,string,array等。
要让支持自己定义的VO,可以用以下的办法:
so.data.user = new SysUserVO();
so.data.user.userName = this.username.text;
so.data.user.password = this.password.text;
取值:
var curUser:Object = so.data.user;
读出
trace(mySO.data.userName,mySO.data.itemNumbers,mySO.data.adminPrivileges)
清除
mySO.clear();
此程序的数据实际上是保存在本机的,所以不需要使用数据库,也只有你的机器才能够看到。
SharedObject对象从Flash MX开始支持,它类似于Cookie,可以在本机保存一些信息,但只限于某个目录。
From:
http://hi.baidu.com/wxl20031515/blog/item/bf4394a0ff6e738c471064ae.html