我们在用Flex 开发RIA 程序时,往往会遇到这样一个问题:我们希望自己的程序能够像传统web程序那样,能够记住登陆用户的登陆信息(至少用户名),自己研究了一下,也应用到了公司的项目上,就是使用flash的共享对象ShareObject.
从Web程序来讲, 共享无非是客户端(浏览器端)和服务器端的共享 .ShareObject又分两类,一类是LSO(Local Share Object 本地共享对象),类似于cookie,而另一种RSO(Remote Share Object 远程共享对象) .对于做过Flash聊天室的人来讲,RSO应该就是熟客了.
从上面来看,很显然,我们这里使用到的是第一种,及LSO, 将用户数据存到一个数组里面,并存入共享对象,而界面上,当用户输入用户名后类似cookie的那个下拉列表框,我们用Flex的list控件来实现. 具体的实现思路如下:
1: 定义一个全局用户共享对象 FUsersDataShareObj
private var FUsersDataShareObj:SharedObject = SharedObject.getLocal("UsersData")
2:用户登陆时,查找并记住用户名,往共享对象里存入用户数据
//记忆用户名
private function saveUsersDataToShareObj(aUserName:String):void
{
var mUsersDataArr:Array=new Array;
if(FUsersDataShareObj.data.Users!=null)
mUsersDataArr=FUsersDataShareObj.data.Users as Array;
if(mUsersDataArr.indexOf(aUserName)<0) mUsersDataArr.push(aUserName);
FUsersDataShareObj.data.Users=mUsersDataArr;
FUsersDataShareObj.flush();
}
3.读取共享对象里的用户数据,并讲匹配的用户数据显示到list控件(id为lst)内,让用户选择
//查找匹配用户
private function readUsersDataFromShareObj(aStr:String):void
{
var mUsersArr:Array=new Array;
var mUsersShowArr:Array=new Array
mUsersArr=FUsersDataShareObj.data.Users as Array;
if(mUsersArr==null ||aStr=="")
{
lst.visible=false;
return;
}
for(var i:int=0;i<mUsersArr.length;i++)
{
if(mUsersArr[i].toString().substr(0,aStr.length)==aStr)
{
mUsersShowArr.push(mUsersArr[i]);
}
}
if (mUsersShowArr.length>0)
{
lst.dataProvider=mUsersShowArr;
lst.visible=true;
}else
{
lst.visible=false;
}
}
基本的实现就是上面那样了,再加点界面上的小处理,一个类似cookie的功能就实现了.