Xml序列化为Object
不想用Remoting 实现,因为要装FluorineFx加上配置很麻烦,试图找一种比较简便的方法去实现,我想要的功能。在Flex与.net程序交互,我至少知道到4、5种方式。但是我选择了一种JavaScript控制Swf方式去实现。首先,以ajax的方式,切查询数据,再返回回调函数,在回调函数里去执行与Swf通信的代码(基本上js能控制所有的swf,只有你想不到,没有你做不到)。
准备工作
搭建 FABridge框架、Ajax框架。
准备完后 先上As代码
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”horizontal” verticalAlign=”top” backgroundColor=”#F9F4E1″ width=”506″ height=”386″ creationComplete=”init();” xmlns:ns1=”bridge.*”>
<mx:Script>
<![CDATA[
import mx.charts.PieChart;
import mx.charts.series.PieSeries;
import mx.rpc.http.HTTPService;
import mx.rpc.xml.*;
import mx.collections.ArrayCollection;
private var chart:PieChart;
private var series:PieSeries;
private var medalsAC:ArrayCollection;
private function init():void {
//doResultScript();
}
public function doResultScript():void{
var arr:Array =[];
var xmlDoc:XMLDocument = new XMLDocument(”<Result><City>北京</City><Gold>200</Gold></Result><Result><City>重启</City><Gold>200</Gold></Result>”);//序列化,可以JS传
var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(true);
var resultObj:Object = decoder.decodeXML(xmlDoc);
for each(var obj1:Object in resultObj.Result){
arr.push(obj1);
}
medalsAC=new ArrayCollection(arr);
series = new PieSeries();
series.nameField = “City”;
series.field = “Gold”;
series.setStyle(”labelPosition”, “callout”);
series.setStyle(”fontSize”,”12″);
series.labelFunction=displayGold;
series.filters = [];
chart = new PieChart();
chart.percentWidth = 100;
chart.percentHeight = 100;
chart.showDataTips = true;
chart.dataProvider = medalsAC;
chart.series = [series];
addChild(chart);
}
private function displayGold(data:Object, field:String,index:Number,percentValue:Number):String {
var temp:String= (” ” + percentValue).substr(0,6);
return “销售人员: “+data.City + ‘\n’ + “客户数: ” + data.Gold + ‘\n’ + temp + “%”;
}
]]>
</mx:Script>
<ns1:FABridge bridgeName=”flex”/>
</mx:Application>
再上JS/Html代码
<html>
<head>
<title>FABridge Tutorial</title>
<script type=”text/javascript” src=”bridge/FABridge.js”></script>
<script type=”text/javascript”>
testFAB();
function testFAB(){
var flexApp;
var initCallback = function() {
flexApp = FABridge.flex.root();
flexApp.doResultScript();
}
FABridge.addInitializationCallback(”flex”,initCallback);
}
</script>
</head>
<body>
<script type=”text/javascript”>
document.write(”<object id=’FABtestTest’ classid=’clsid:D27CDB6E-AE6D-11cf-96B8-444553540000′ codebase=’http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0′ height=’400′ width=’500′>”);
document.write(”<param name=’flashvars’ value=’bridgeName=flex’/>”);
document.write(”<param name=’src’ value=’FabText.swf’/>”);
document.write(”<embed name=’FABtestTest’ src=’FabText.swf’ height=’400′ width=’500′ flashvars=’bridgeName=flex’/>”);
document.write(”</object>”);
</script>
</body>
</html>
flexApp.doResultScript();就是调用图表函数的执行代码。 还可以在里面传递参数。