22.11.使用查询字符串传递数据给模块

22.11.1.问题
我想在模块载入期间传送数据给模块。
22.11.2.解决办法
在模块SWF的URL里加上查询字符串,当模块加载完成后,使用模块的loaderInfo属性解析URL字符串。
22.11.3.讨论
你可以追加查询字符串参数给模块载入类的URL。当模块载入后,通过mx.modules.Module类的loaderInfo属性访问这个URL。使用ActionScript,你可以解析出有用URL中参数信息。

查询字符串紧跟在?号子后用&符号分割多个参数。

下面的例子程序在模块后追加了查询字符串:
+展开
-XML
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="verticalcreationComplete="creationHandler();">

<mx:Script>
<![CDATA[
private static const F_NAME:String = "Ted";
private static const L_NAME:String = "Henderson";
private function creationHandler():void{
var params:String = "firstName="+ F_NAME +"&lastName="+ L_NAME;
moduleLoader.url = "NameModule.swf?"+ params;
}

]]>
</mx:Script>
<mx:ModuleLoader id="moduleLoader" />
</mx:Application>

主应用程序初始化和<mx:ModuleLoader>实例完成后,url属性中添加了参数对。firstName和lastName属性值被传入到载入的模块中。

载入的模块通过loaderInfo属性解析URL,获得传入的参数数据:
+展开
-XML
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolutewidth="100%height="100%creationComplete="creationHandler();">

<mx:Script>
<![CDATA[
import mx.utils.ObjectProxy;
[Bindable] 
private var _proxy:ObjectProxy;
private function creationHandler():void{
_proxy = new ObjectProxy();
var pattern:RegExp = /.*\?/ ;
var query:String = loaderInfo.url.toString();
query = query.replace( pattern, "");
var params:Array = query.split( "&");
forvar i:int = 0; i < params.length; i++ ){
var keyVal:Array = ( params[i]).toString().split("=");
_proxy[keyVal[0]] = keyVal[1];
}
}

]]>
</mx:Script>
<mx:Text text="{'Hello,'+ _proxy.firstName + ' '+_proxy.lastName}" />
</mx:Module>

被载入模块解析URL中的字符串参数,把它们作为属性添加到ObjectProxy类对象中,通过ObjectProxy类的数据绑定特性,当属性值被更新时,Text控件值也会被更新。

使用查询字符串传递数据是被载入模块获取数据,处理数据的简便方式。

加支付宝好友偷能量挖...


评论(0)网络
阅读(70)喜欢(0)flash/flex/fcs/AIR