Apache flex xml作为flex图表的数据源
这是MXML代码Apache flex xml作为flex图表的数据源,apache-flex,flex4,flex3,Apache Flex,Flex4,Flex3,这是MXML代码 <?xml version="1.0"?> <!-- charts/XMLFileDataProvider.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > <mx:Model id="results" source="data.xml"/> <mx:Panel title="Line Chart"> <mx:LineCha
<?xml version="1.0"?>
<!-- charts/XMLFileDataProvider.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Model id="results" source="data.xml"/>
<mx:Panel title="Line Chart">
<mx:LineChart id="myChart" dataProvider="{results.result}" showDataTips="true" width="600" height="240">
<mx:horizontalAxis>
<mx:CategoryAxis categoryField="month"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries yField="banana" displayName="Banana"/>
<mx:LineSeries yField="apple" displayName="Apple"/>
<mx:LineSeries yField="orange" displayName="Orange"/>
</mx:series>
</mx:LineChart>
<mx:Legend dataProvider="{myChart}"/>
</mx:Panel>
</mx:Application>
当我更改xml文件中的数据时,这些更改不会反映在图表中。有人能告诉我哪里出了问题吗
这是xml文件
<data>
<result month="Jan-04">
<apple>81768</apple>
<orange>60310</orange>
<banana>43357</banana>
</result>
<result month="Feb-04">
<apple>81156</apple>
<orange>58883</orange>
<banana>49280</banana>
</data>
81768
60310
43357
81156
58883
49280
这可能会对您有所帮助,我已经创建了有关HTTPService的示例:-
您可以根据上述注释为您的问题实现逻辑
<?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" minWidth="955" minHeight="600"
creationComplete="init();switchImage()">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<!--<fx:Model id="results" />-->
<s:HTTPService id="results" result="resultHandler(event)" fault="{trace('Fault')}" />
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.rpc.events.ResultEvent;
private function init():void
{
var timer:Timer = new Timer(2000);
timer.addEventListener(TimerEvent.TIMER, switchImage);
timer.start();
}
private function switchImage(event:TimerEvent = null):void
{
//url as external URL outside of project folder
results.url = "C:/data/data.xml";
results.send();
}
private function resultHandler(event:ResultEvent):void
{
myChart.dataProvider = null;
myChart.dataProvider = event.result.data.result;
}
]]>
</fx:Script>
<mx:Panel title="Line Chart">
<mx:LineChart id="myChart" showDataTips="true" width="600" height="240">
<mx:horizontalAxis>
<mx:CategoryAxis categoryField="month"/>
</mx:horizontalAxis>
<mx:series>
<mx:LineSeries yField="banana" displayName="Banana"/>
<mx:LineSeries yField="apple" displayName="Apple"/>
<mx:LineSeries yField="orange" displayName="Orange"/>
</mx:series>
</mx:LineChart>
<mx:Legend dataProvider="{myChart}"/>
</mx:Panel>
</s:Application>
它不会刷新,因为您仅在图表应用程序的初始加载时获取数据。如果您想让它加载数据的每次更改(即XML),那么每次都必须从XML调用/获取数据。要做到这一点,您可以在应用程序中创建一个计时器,它将在一段时间间隔后反复加载此数据。您可以在XML中创建一个属性,它将显示XML的变化(如随机数),创建一个变量并捕获它。如果未将XML数据分配给图表数据提供程序,请检查捕获编号是否与上一个相同。在results.url中,我放置了XML文件的位置,但仍然无法看到绘图将XML保留在“项目外部”,例如在桌面上,然后重试。它将工作在C:data/data.xml和results.url=“C:/data/data.xml”中,但仍然无法看到图形上的任何内容。我可以通过放置results.url=“C:/data/data.xml”来执行它;我编辑了一些代码。现在您可以签入折线图id了。您不认为需要指定数据源吗