Flex两页面间的传值问题总结

两种常用的传值方法:

一、 利用ExternalInterface调用Javascript

a) 该方法主要利用ExternalInterfacecall方法调用Javascript函数,进而修改地址(有点类似于地址修改法),在接受页面上主要是靠BrowserManager获取地址栏信息,并利用URLUtil截取参数。

b) 该方法虽然简单但是确调用了2种语言,给编写带来一定的困难

发送页面代码(second.html)

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>

<![CDATA[

function kk():void{

var val:String = myparam.text;

ExternalInterface.call("function(){window.location.href='http://localhost:8080/send/page.html#param1="+val+"'}"); }

]]>

</mx:Script>

<mx:TextInput id="myparam"></mx:TextInput>

<mx:Button name="ok" click="kk()" x="185" label="提交"></mx:Button>

</mx:Application>

接收页面代码(page.html):

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" >

<mx:Script>

<![CDATA[

import mx.managers.IBrowserManager;

import mx.managers.BrowserManager;

import mx.utils.URLUtil;

[Bindable]

var param:String;

function init():void

{

var bm:IBrowserManager = BrowserManager.getInstance(); 

bm.init();

var o:Object = URLUtil.stringToObject(bm.fragment,"&");

param = o.param1;

}

]]>

</mx:Script>

<mx:TextInput id="val" text="{param}">

</mx:TextInput>

</mx:Application>

二、 利用SharedObject(本地共享对象传送)

a) 该对象类似于Cookie,将需要传送的数据放在SharedObject对象中,而实际上在本机大致在(win2k和 win xp中,默认路径为C:\Documents and Settings\username\Application Data\Macromedia\Flash Player\#SharedObjects (username为机器的用户名))位置生成一个sol文件,该对象具有一个data属性,只要将你要传的数据按键值对放进去就好了,下次读取的时候就在本地直接读取即可

b) 遗憾的是,该对象要求你自己创建还要自己清除,并且在写入数据时一定要强制刷新,否则数据无法希尔

发送页面代码(index.html)

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:Script>

<![CDATA[

function s mit():void

{

var param:String = myparam.text;

//创建全局SharedObject,如果不用全局就去掉后面的"/",一旦去掉那么cookie只能被自己的Application使用,其他Applicaiton无法看见

//myparam是要求在本机创建一个叫cookie.sol的文件

var obj:SharedObject = SharedObject.getLocal("cookie","/");

obj.data.username=myparam.text;

obj.flush();

//调用URLRequest将跳转到second.html页面

var reqst:URLReqst =new URLReqst();

reqst.url="second.html";

navigateToURL(reqst);

}

]]>

</mx:Script>

<mx:TextInput id="myparam"></mx:TextInput>

<mx:Button label="提交" click="s mit()" x="177"></mx:Button>

</mx:Application>

接收页面代码(second.html):

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">

<mx:Script>

<![CDATA[

[Bindable]

var param:String;

function init():void

{

//在本地找到myparam.sol文件

var obj:SharedObject =SharedObject.getLocal("cookie","/");

//读取前页存入的数据

param = obj.data.username;

//用完了别忘了将myparam.sol文件删除

obj.clear();

}

]]>

</mx:Script>

<mx:TextInput id="mypar" text="{param}"></mx:TextInput>

</mx:Application>

posted @ 2012-06-17 00:48  灬殇丶夜灬  阅读(740)  评论(0编辑  收藏  举报