flex4(flash builder)调用Amf远程对象动态添加LineChart图表线条

    技术2025-02-05  37

    index.mxml<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" initialize="init();"> <fx:Script> <!--[CDATA[ import mx.charts.HitData; import mx.charts.events.ChartItemEvent; import mx.charts.series.LineSeries; import mx.charts.series.items.LineSeriesItem; import mx.charts.CategoryAxis; import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.events.FlexEvent; import mx.messaging.Channel; import mx.messaging.ChannelSet; import mx.messaging.channels.AMFChannel; import mx.rpc.events.FaultEvent; import mx.rpc.events.InvokeEvent; import mx.rpc.events.ResultEvent; import mx.rpc.remoting.RemoteObject; private var myRemoteObject:RemoteObject; private var myChannelSet:ChannelSet private function init():void{ var amfChanel:AMFChannel = new AMFChannel("myAmfChannel","http://www.a.com/amfphp/gateway.php"); myChannelSet=new ChannelSet(); myChannelSet.addChannel(amfChanel); myRemoteObject = new RemoteObject(); myRemoteObject.channelSet = myChannelSet; myRemoteObject.destination = 'myApp'; myRemoteObject.source = "myApp"; myRemoteObject.addEventListener( FaultEvent.FAULT, gotError ); myRemoteObject.getData.addEventListener( ResultEvent.RESULT, getDatas ); } private function getDatas( result:ResultEvent ):void{ var newlines:ArrayCollection = new ArrayCollection(); newlines.source = result.result['lines'] as Array; for(var i:int =0 ;i<newlines.length;i++){ var a:LineSeries = new LineSeries(); a.yField = newlines[i]['en'].toString(); a.displayName = newlines[i]['cn'].toString(); a.setStyle("form", "curve"); linechart.series.push(a); } linechart.series = linechart.series; var lineca:CategoryAxis = new CategoryAxis(); lineca.categoryField = "Date"; linechart.horizontalAxis = lineca; linechart.dataProvider = result.result['datas']; } private function addLines( result:ResultEvent ):void { var newlines:ArrayCollection = new ArrayCollection(); newlines.source = result.result as Array; for(var i:int =0 ;i<newlines.length;i++){ var a:LineSeries = new LineSeries(); a.yField = newlines[i]['en'].toString(); a.displayName = newlines[i]['cn'].toString(); a.setStyle("form", "curve"); linechart.series.push(a); } linechart.series = linechart.series; var lineca:CategoryAxis = new CategoryAxis(); lineca.categoryField = "Date"; linechart.horizontalAxis = lineca; } private function gotError( fault:FaultEvent ):void { Alert.show( "错误信息 - " + fault.fault.faultString, "出错了" ); } private function showTipLine(hitData:HitData):String{ var lSI:LineSeriesItem = hitData.chartItem as LineSeriesItem; var lineSeries:LineSeries=LineSeries(hitData.chartItem.element); var str:String="<b>" + lineSeries.displayName + "</b>/n"; str+="日期:" + hitData.item.Date + "/n"; str+="次数:" + lSI.yValue; return str; } protected function linechart_creationCompleteHandler(event:FlexEvent):void { myRemoteObject.getData(); } ]]--> </fx:Script> <s:layout> <s:HorizontalLayout verticalAlign="top" horizontalAlign="center" /> </s:layout> <mx:LineChart id="linechart" color="0x323232" height="100%" dataTipFunction="showTipLine" showDataTips="true" creationComplete="linechart_creationCompleteHandler(event)" /> <mx:Legend dataProvider="{linechart}" color="0x323232"/> </s:Application>

    myApp.php

    <?phpclass myApp { public function __construct() {  }

      public function getData() {  $r[] =  array("Date"=>"21", "en1"=>"2000", "en2"=>"1500", "en3"=>"450");  $r[] =  array("Date"=>"22", "en1"=>"2100", "en2"=>"2500", "en3"=>"1450");  $r[] =  array("Date"=>"23", "en1"=>"2200", "en2"=>"3500", "en3"=>"2450");  $r[] =  array("Date"=>"24", "en1"=>"2300", "en2"=>"4500", "en3"=>"450");  $n[] =  array("en"=>"en1", "cn"=>"名称1");  $n[] =  array("en"=>"en2", "cn"=>"名称2");  $n[] =  array("en"=>"en3", "cn"=>"名称3");  $rr['lines'] = $n;  $rr['datas'] = $r;  return $rr; }

    }?>

    flash builder 调用PHP 生成 project.fml

    <?xml version="1.0" encoding="UTF-8"?><model xmlns="http://ns.adobe.com/Fiber/1.0">  <annotation name="ActionScriptGeneration">    <item name="FullyQualifyReferences">true</item>  </annotation>  <service name="MyApp">    <annotation name="ActionScriptGeneration">      <item name="Source">myApp</item>      <item name="ServiceType">RemoteObject</item>      <item name="Package">services.myapp</item>      <item name="Endpoint">gateway.php</item>      <item name="Destination">myApp</item>    </annotation>    <annotation name="ServiceTypeGroup">      <item name="ServiceBackendType">PHP</item>    </annotation>    <annotation name="ServiceConfig">      <item name="PHP_RELATIVE_LOCATION">amfphp/services/myApp.php</item>      <item name="PHP_SERVER_ROOT">D:/flex/webtest</item>      <item name="DEFAULT_ENTITY_PACKAGE">valueObjects</item>      <item name="PHP_SERVICES_FOLDER">D:/flex/webtest/amfphp/services</item>      <item name="PHP_LOCATION">D:/flex/webtest/amfphp/services/myApp.php</item>      <item name="LINKED_FILE">myApp.php</item>      <item name="PHP_SERVER_ROOT_URL">http://www.a.com/</item>      <item name="ABSOLUTE_ENDPOINT">http://www.a.com/amfphp/gateway.php</item>      <item name="PHP_CLASS_NAME">myApp</item>    </annotation>    <function name="getData" return-type="opaque">      <annotation name="analyze group">        <item name="analyzed">false</item>      </annotation>      <annotation name="original signature">        <item name="returnType">opaque</item>      </annotation>    </function>    <function name="getLines" return-type="opaque">      <annotation name="analyze group">        <item name="analyzed">false</item>      </annotation>      <annotation name="original signature">        <item name="returnType">opaque</item>      </annotation>    </function>  </service></model>flash builder 调用PHP 生成 as 文件省略了!

    最新回复(0)