0

我有 flex 项目,我想调用 webservice 并将值从它传递到 xml 文件以更新融合图表 xml 我的代码是

<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 服务。并在创建完成时发送用户 ID 详细信息以从 Web 服务获取数据。现在我需要在哪里调用 init 函数,以便它使用来自 Web 服务的值更新 xml 文件并显示融合小部件

4

2 回答 2

1

您不需要“setDataXML”处理程序方法。此外,“init”方法中不需要任何“URLLoader”或“URLRequest”。FusionCharts 支持 XML 数据以及 XML 路径。所以删除'setDataXML'并从'init'方法中删除所有代码,然后添加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 文件是否在该时间点正确更新。

于 2011-05-24T12:58:45.310 回答
1

当图表完成加载并准备好数据时,您可以调用 init 函数。

您可以通过侦听仪表的 FCLoadEvent 或 FCRenderEvent 来执行此操作。

请尝试使用:

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

或者

<ns1:FusionWidgets id="fw" FCChartType="Bulb" FCDataXML="avgPUEXml" FCLoadEvent="init()"/>
于 2011-05-24T12:56:22.527 回答