Xml序列化为Object

 最近,使用HTTPService对象与DotNet结合,做一个图表程序。
       不想用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();就是调用图表函数的执行代码。 还可以在里面传递参数。

posted @ 2010-01-25 14:28  韦君  阅读(509)  评论(0编辑  收藏  举报