Очистка / очистка линейной диаграммы во Flex - PullRequest
0 голосов
/ 21 октября 2011

У меня есть линейный график в flex с осью dateTime.Я устанавливаю поставщик данных для этой линейной диаграммы с помощью ActionScript.График рисуется.Проблема возникает, когда я назначаю нулевое значение провайдеру данных, так что график становится пустым.

Фактический код выглядит примерно так:точно так же, как lineChart. Хотя я думаю, что не самый лучший способ написания кода, этот работает нормально.Проблема в сбрасывании графика.

У меня есть кнопка, которая при нажатии делает: lineChart.dataprovider = null;lineChart.series = null;

Но мой флэш-плеер (версия отладчика FP 10) выдает следующую ошибку

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at mx.charts::AxisRenderer/measureHorizontalGutters()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\AxisRenderer.as:2275]
    at mx.charts::AxisRenderer/calcRotationAndSpacing()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\AxisRenderer.as:1889]
    at mx.charts::AxisRenderer/adjustGutters()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\AxisRenderer.as:1565]
    at mx.charts.chartClasses::CartesianChart/updateAxisLayout()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\CartesianChart.as:2133]
    at mx.charts.chartClasses::CartesianChart/updateDisplayList()[E:\dev\4.0.0\frameworks\projects\datavisualization\src\mx\charts\chartClasses\CartesianChart.as:1391]
    at mx.core::UIComponent/validateDisplayList()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8531]
    at mx.managers::LayoutManager/validateDisplayList()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:663]
    at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:736]
    at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.0.0\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1072]

Какое решение?Не выдает ошибку при удалении

lineChart.series=null;

.Но утверждение

lineChart.dataprovider=null;

также не делает диаграмму пустой.

1 Ответ

0 голосов
/ 21 октября 2011

Ниже приведено простое приложение, которое я создал, чтобы воссоздать вашу проблему.Если установить для dataProvider значение null, диаграмма будет очищена без каких-либо исключений.Запустите его и посмотрите.Я говорю, что ваша проблема в другом месте.

<?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" >

    <fx:Script><![CDATA[

        import mx.collections.ArrayCollection;
        [Bindable]
        public var expenses:ArrayCollection = new ArrayCollection([
            {Month:"Jan", Profit:2000, Expenses:1500, Amount:450},
            {Month:"Feb", Profit:1000, Expenses:200, Amount:600},
            {Month:"Mar", Profit:1500, Expenses:500, Amount:300}
        ]);


        protected function button1_clickHandler(event:MouseEvent):void
        {
            myChart.dataProvider = null;

        }

    ]]></fx:Script>

    <s:layout>
        <s:VerticalLayout />
    </s:layout>


    <mx:Panel title="Line Chart">
        <mx:LineChart id="myChart" 
                      dataProvider="{expenses}" 
                      showDataTips="true"
                      >
            <mx:horizontalAxis>
                <mx:CategoryAxis 
                    dataProvider="{expenses}" 
                    categoryField="Month"
                    />
            </mx:horizontalAxis>
            <mx:series>
                <mx:LineSeries 
                    yField="Profit" 
                    displayName="Profit"
                    />
                <mx:LineSeries 
                    yField="Expenses" 
                    displayName="Expenses"
                    />
            </mx:series>
        </mx:LineChart>
        <mx:Legend dataProvider="{myChart}"/>
    </mx:Panel>

    <s:Button click="button1_clickHandler(event)" label="Clear" />

</s:Application>
...