外界与Flex Application的交互处理(之传递参数)
在现实应用中,涉及到很多地方,外部页面需要与flex application进行参数或者数据的交互,甚至相互行为影响。今天先来看看外部页面传递参数给flex application。
但首先还得介绍一个swfobject的开源。swfobject使得在页面中嵌入flash文件更加容易简易。那种传统的<object id="xxx">之类的引入flash的方式,确实有很多弊端和不足。而swfobject则让你的页面处理更为简洁。具体就不介绍了,可参考 http://code.google.com/p/swfobject/,或中国参考手册:http://farthinker.cn/2007/12/27/swfobject-2_0-doc-translation。
俺就是采用swfobject来引入flash,并传递参数的。一下是一个简单的例子:
<mce:script type="text/javascript" src="swfobject.js" mce_src="swfobject.js"></mce:script> <mce:script type="text/javascript"><!-- var flashvars = { fetchProcessDefURL: "http://localhost:8080/ProcessContentServlet", fetchProcessDefID: "<%=processDefID%>" }; var params = {}; var attributes = {}; swfobject.embedSWF("flowdesigner.swf", "myContent", "100%", "100%", "9.0.0", "expressInstall.swf",flashvars,params,attributes); // --></mce:script> <body> <div id="myContent"> </div> </body>
上面的代码,就是往 flowdesigner.swf 文件中传递了两个参数。这两个参数则可以在flex中application complete事件处理中被获取(加入你是希望在flash被加载的同时获取到)。
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="appComplete()"> <mx:Script> <!--[CDATA[ public function appComplete():void{ var fetchProcessDefURL:String = this.loaderInfo.parameters.fetchProcessDefURL; var fetchProcessDefID:String = this.loaderInfo.parameters.fetchProcessDefID; //遍历所有参数 var keyStr:String; var valueStr:String; var paramObj:Object = this.loaderInfo.parameters; var urlvarsData:String = ""; for (keyStr in paramObj) { if(keyStr!="fetchProcessDefURL"){ valueStr = String(paramObj[keyStr]); urlvarsData = "&"+keyStr+"="+valueStr+urlvarsData; } } urlvarsData = urlvarsData.substr(1); var params:URLVariables = new URLVariables(urlvarsData); //fetchProcessDefinitionHttpService上一个http service请求 fetchProcessDefinitionHttpService.url=fetchProcessDefURL; fetchProcessDefinitionHttpService.method="GET"; fetchProcessDefinitionHttpService.send(params); } ]]--> </mx:Script> </mx:Application>
如上面代码所以,在ApplicationComplete事件处理方法中利用 loaderInfo.parameters来获取相应的参数。
在上面的例子中,会在application complete完成后,发送一个http service请求。有关http service的处理此处就不再累赘介绍了,外面的资料太多。