具有多个序列和多个轴的Flex图表给出了怪异的结果

问题描述

|| Flash Builder图表面临一个严重的问题。 第一次加载图表时,我会收到以下信息- 但是,如果我立即在同一浏览器中刷新页面,则会得到以下信息- 第二个是预期的。如果我关闭浏览器窗口并在新的浏览器窗口中将其打开,只会重复出现此问题。 为了正确解释,我在此处附加源代码-
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<s:Group xmlns:fx=\"http://ns.adobe.com/mxml/2009\" 
         xmlns:s=\"library://ns.adobe.com/flex/spark\" 
         xmlns:defaultstatistics=\"services.defaultstatistics.*\"
         xmlns:mx=\"library://ns.adobe.com/flex/mx\" width=\"800\" height=\"800\"      
         xmlns:Examples=\"Examples.*\"
         creationComplete=\"start();\"  >
    <!--<fx:Style source=\"styles/Golibaje.css\"/>-->
    <fx:Script>
        <![CDATA[
            import CustomEvents.ChartLoadedEvent;

            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.utils.object_proxy;

            import org.axiis.core.Axiissprite;
            import org.axiis.data.DataSet;

            private var ds:DataSet = new DataSet();         

            public var loaded:Boolean = false;


            //Set this variable to the appropriate time period used by the data. 
            [Bindable]
            public var timeIncrement:String = \"month\";

            [Bindable]
            private var performanceData:ArrayCollection = new ArrayCollection([
                {month:\"January\",correct:100,correctOutsideBase:50,incorrect:50,skipped:25},{month:\"February\",correct:110,correctOutsideBase:40,skipped:30},{month:\"march\",correct:120,incorrect:25,{month:\"April\",correctOutsideBase:45,incorrect:20,skipped:20},{month:\"May\",correct:135,correctOutsideBase:25,skipped:15},{month:\"June\",correct:150,correctOutsideBase:15,incorrect:15,skipped:5},{month:\"July\",correct:155,correctOutsideBase:10,incorrect:10},{month:\"August\",correct:160,correctOutsideBase:5,incorrect:15},{month:\"September\",correct:170,incorrect:10}
            ]);

            [Bindable]
            private var pointsData:ArrayCollection = new ArrayCollection([
                {month:\"January\",points:1000},points:1200},points:1400},points:1500},points:1600},points:1650},points: 1800},points: 2000},points: 2500}
            ]);



            public function start():void
            {   
                var t:Timer = new Timer(2000,1);               
                t.addEventListener(TimerEvent.TIMER_COMPLETE,fireChartLoaded);
                t.start();
            }



            private function fireChartLoaded(event){                
                loaded = true;
                dispatchEvent(new Event(\"chartLoaded\"));
            }

        ]]>
    </fx:Script>

    <fx:Declarations>
    </fx:Declarations>

    <mx:CartesianChart id=\"PerformanceTimeChart\" dataProvider=\"{performanceData}\"
                    showdatatips=\"true\" width=\"800\" height=\"700\" 
                    verticalCenter=\"0\" horizontalCenter=\"0\">
        <mx:verticalAxisRenderers>
            <mx:AxisRenderer placement=\"left\" axis=\"{columnAxis}\"/>
            <mx:AxisRenderer placement=\"right\" axis=\"{pointsAxis}\"/>
        </mx:verticalAxisRenderers>
        <mx:horizontalAxis>
            <mx:CategoryAxis categoryField=\"{timeIncrement}\"/>
        </mx:horizontalAxis>
        <mx:series>
            <mx:ColumnSet type=\"stacked\">
                <mx:verticalAxis>
                    <mx:Linearaxis id=\"columnAxis\" title=\"Result\"/>
                </mx:verticalAxis>
                <mx:ColumnSeries
                    yField=\"correct\"
                    displayName=\"Correct\"
                    verticalAxis=\"{columnAxis}\"/>
                <mx:ColumnSeries
                    yField=\"correctOutsideBase\"
                    displayName=\"Outside Base\"
                    verticalAxis=\"{columnAxis}\"/>
                <mx:ColumnSeries
                    yField=\"incorrect\"
                    displayName=\"Wrong Answer\"
                    verticalAxis=\"{columnAxis}\"/>
                <mx:ColumnSeries
                    yField=\"skipped\"
                    displayName=\"Skipped Question\"
                    verticalAxis=\"{columnAxis}\"/>
            </mx:ColumnSet>
            <mx:Lineseries
                dataProvider=\"{pointsData}\"
                yField=\"points\"
                displayName=\"Points\">
                <mx:verticalAxis>
                    <mx:Linearaxis id=\"pointsAxis\" title=\"Points\"/>
                </mx:verticalAxis>
            </mx:Lineseries>
        </mx:series>
    </mx:CartesianChart>
    <mx:Legend dataProvider=\"{PerformanceTimeChart}\" direction=\"horizontal\"/>
</s:Group>
任何人都知道为什么会发生这种情况吗?     

解决方法

        在CartesianChart中使用ColumnSet时,Flex Charting SDK中存在一个错误,涉及将元素设置为ColumnSet包含的ColumnSeries的dataTranform对象。 作为此问题的解决方法,我将元素自己设置为扩展的ColumnSeries类中的dataTransform对象:
public class GroupedColumnSeries extends ColumnSeries
{

    override protected function commitProperties():void
    {
        super.commitProperties();

        if (this.parent is ColumnSet)
        {
            dataTransform.elements=[ColumnSet(this.parent)];
        }
    }

}