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

众所周知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):
  

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.  <mx:Script>  
  4.   <![CDATA[  
  5.   function kk():void{  
  6.    var value:String = myparam.text;  
  7.  ExternalInterface.call("function(){window.location.href=’http://localhost:8080/send/page.html#param1="+value+"’}");  }  
  8.   ]]>  
  9.  </mx:Script>  
  10.  <mx:TextInput  id="myparam"></mx:TextInput>  
  11.  <mx:Button name="ok" click="kk()" x="185" label="提交"></mx:Button>  
  12. </mx:Application>  
 

<?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 value:String = myparam.text; ExternalInterface.call("function(){window.location.href=’http://localhost:8080/send/page.html#param1="+value+"’}"); } ]]> </mx:Script> <mx:TextInput id="myparam"></mx:TextInput> <mx:Button name="ok" click="kk()" x="185" label="提交"></mx:Button> </mx:Application>


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

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()" >  
  3.  <mx:Script>  
  4.   <![CDATA[  
  5.    import mx.managers.IBrowserManager;  
  6.    import mx.managers.BrowserManager;  
  7.    import mx.utils.URLUtil;  
  8.    [Bindable]  
  9.    var param:String;  
  10.    function init():void  
  11.    {  
  12.     var bm:IBrowserManager = BrowserManager.getInstance();   
  13.     bm.init();  
  14.     var o:Object = URLUtil.stringToObject(bm.fragment,"&");  
  15.     param = o.param1;  
  16.    }  
  17.   ]]>  
  18.  </mx:Script>  
  19.  <mx:TextInput id="val" text="{param}">  
  20.  </mx:TextInput>  
  21. </mx:Application>  
<?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):

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">  
  3.  <mx:Script>  
  4.   <![CDATA[  
  5.    function submit():void  
  6.    {  
  7.     var param:String = myparam.text;  
  8.     //创建全局SharedObject,如果不用全局就去掉后面的"/",一旦去掉那么cookie只能被自己的Application使用,其他Applicaiton无法看见   
  9.     //myparam是要求在本机创建一个叫cookie.sol的文件   
  10.     var obj:SharedObject = SharedObject.getLocal("cookie","/");  
  11.     obj.data.username=myparam.text;  
  12.     obj.flush();  
  13.     //调用URLRequest将跳转到second.html页面   
  14.     var request:URLRequest =new URLRequest();  
  15.     request.url="second.html";  
  16.     navigateToURL(request);  
  17.    }  
  18.   ]]>  
  19.  </mx:Script>  
  20.  <mx:TextInput id="myparam"></mx:TextInput>  
  21.  <mx:Button label="提交" click="submit()" x="177"></mx:Button>  
  22. </mx:Application>  
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ function submit():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 request:URLRequest =new URLRequest(); request.url="second.html"; navigateToURL(request); } ]]> </mx:Script> <mx:TextInput id="myparam"></mx:TextInput> <mx:Button label="提交" click="submit()" 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>

 

 

转自:http://blog.csdn.net/sunchunmei555/article/details/7095342

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值