2011-03-31 84 views
0

我有Flex項目,我想調用web服務,並通過從它的值到XML文件更新融合圖XML 我的代碼是 柔性融合圖表與web服務

<fx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 
     import mx.events.FlexEvent; 
     import mx.rpc.events.FaultEvent; 
     import mx.rpc.events.ResultEvent; 
     public var PUENumber:String; 
     protected var xmlLoader:URLLoader; 
     [Bindable] 
     public var avgPUEXml:XML = new XML; 

     protected function init():void 
     { 
      xmlLoader = new URLLoader(); 
      xmlLoader.addEventListener(Event.COMPLETE,setDataXML) 
      xmlLoader.load(new URLRequest("data/AvgPUE.xml")); //Loading xml file for the chart from the folder 
     }; 

     protected function setDataXML(event:Event):void 
     { 
      avgPUEXml = XML(event.target.data); 
      avgPUEXml.value = PUENumber; //updating chart xml value 
      fw.FCDataXML = avgPUEXml.toString(); 
      fw.FCRender(); 
     }; 

     protected function getDC_POWERdataResult_resultHandler(event:ResultEvent):void 
     { 
      PUENumber = getDC_POWERdataResult.lastResult; //getting value to update in xml file 
      init(); 
     } 
     protected function bordercontainer1_creationCompleteHandler(event:FlexEvent):void 
     { 
      getDC_POWERdataResult.token = mGEMWS.getDCPUE("4","715"); //user details to get data from the method 
     } 

    ]]> 
</fx:Script> 

<fx:Declarations> 
    <s:CallResponder id="getDC_POWERdataResult" result="getDC_POWERdataResult_resultHandler(event)"/> 
    <mgemws:MGEMWS id="mGEMWS" showBusyCursor="true" 
        fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"/> 
</fx:Declarations> 

    <ns1:FusionWidgets id="fw" FCChartType="Bulb" FCDataXML="avgPUEXml" /> 

在該聲明正在調用Web服務。並在creationCompelete發送用戶ID詳細信息從Web服務獲取數據。現在我需要調用init函數,以便它使用來自Web服務的值更新xml文件並顯示融合小部件

回答

1

你不需要 'setDataXML' 處理方法。你也不需要'init'方法中的'URLLoader'或'URLRequest'。 FusionCharts支持XML數據以及XML路徑。所以去掉「setDataXML」,並從「初始化」的方法清除所有的代碼,並添加只是fw.addEventListener(FCEvent.FCRenderEvent, wgdtRendHandler); 並添加以下處理方法 -

protected function wgdtRendHandler(e:FCEvent):void{ 
    e.target.FCSetDataURL='data/AvgPUE.xml'; 
    e.target.removeEventHandler(FCEvent.FCRenderEvent, wgdRendHandler); 
} 

我認爲這應該爲你工作。如果你仍然沒有得到圖表中更新的數據,請檢查'init'方法中的XML文件是否在該時間點正確更新。

1

當圖表完成加載並準備好數據時,您可以調用init函數。

你可以這樣做聽着FCLoadEvent或FCRenderEvent的規。

請嘗試使用:

<ns1:FusionWidgets id="fw" FCChartType="Bulb" FCDataXML="avgPUEXml" FCRenderEvent="init()"/> 

<ns1:FusionWidgets id="fw" FCChartType="Bulb" FCDataXML="avgPUEXml" FCLoadEvent="init()"/>