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

众所周知Flex主要用于B/S结构程序的开发,凡是这类型的开发都存在页面间的传值的问题,通常一般的B/S开发主要不外乎使用地址修改法,隐藏表单域等方法,但是这些方法在Flex中确没有用,原因是应为Flex支持的模型和普通的B/S开发语言不一样,一般的B/S开发语言使用的主要是请求/响应模型,而Flex采用的是事件驱动模型(这种模型主要见于C/S结构程序),所以我们的Form表单等传值方法就无效了,哪么我们如何在两个这样模型的页面中传递数据呢?下面我们讲述下两种常用的传值方法:
一、 利用ExternalInterface调用Javascript
a) 该方法主要利用ExternalInterface的call方法调用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\FlashPlayer\#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 smit():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();
    //调用URLReqst将跳转到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>

 

相关文章

一:display:flex布局display:flex是一种布局方式。它即可以...
1. flex设置元素垂直居中对齐在之前的一篇文章中记载过如何...
移动端开发知识点pc端软件和移动端apppc端软件是什么,有哪些...
最近挺忙的,准备考试,还有其他的事,没时间研究东西,快周...
display:flex;把容器设置为弹性盒模型(设置为弹性盒模型之后...
我在网页上运行了一个Flex应用程序,我想使用Command←组合键...