어떻게 코드 차트를 새로 고침할 때마다 데이터가 추가하 dataProvider?

StackOverflow https://stackoverflow.com/questions/408139

  •  03-07-2019
  •  | 
  •  

문제

지금 내가 누락 될 뭔가를 여기로 이것은 아주 기본적인 문제는 해결에서 어떤"시작하는 코드 차트"습니다.그러나,모든 것을 찾을 수 있었 힌트는 차트를 해야될 때마다 자동으로 업데이트 dataProvider 변경합니다.마음,당신합니다.

이것은 나의 태그:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="econemon Sensor Simulator">
    <!-- ... -->
    <mx:Script source="SimulatorFunctions.as" />
    <mx:HDividedBox left="0" top="0" bottom="0" right="0">
        <!-- ... -->
        <mx:VDividedBox width="75%" height="100%">
            <mx:PlotChart width="100%" height="33%" dataProvider="{xmlDataTest}">
                <mx:horizontalAxis>
                    <mx:DateTimeAxis dataUnits="seconds" displayLocalTime="true" parseFunction="dtFromUnixtime"/>
                </mx:horizontalAxis>
                <mx:series>
                    <mx:LineSeries xField="dt" yField="fltValue" displayName="Testkurve" />
                </mx:series>
            </mx:PlotChart>
            <mx:Panel width="100%" height="66%">
                <mx:Button label="Start" click="vDataStart()" />
                <mx:Button label="Stop" click="vDataStop()" />
            </mx:Panel>
        </mx:VDividedBox>
    </mx:HDividedBox> 
</mx:WindowedApplication>

이것은 부분이 내립니다.

[Bindable]
public var xmlDataTest:Array = [
        { dt: "1230908694", fltValue: "50.4" },
        // ...
        { dt: "1230909594", fltValue: "35.4" }
]

public var dflt:Number = 10.0;
public var timData:Timer = new Timer(3000);

// ...

public function vDataStart():void
{
    if (!timData.running) {
        timData.addEventListener(TimerEvent.TIMER, vAppendDatum);
        timData.start();
    }
}

public function vDataStop():void
{
    if (timData.running) {
        timData.stop();
    }
}

public function vAppendDatum(evt:Event):void
{
    var dtNew:String;
    var fltNew:String;
    var fltT: Number;
    dtNew = String(Number(xmlDataTest[xmlDataTest.length - 1].dt) + 100);
    fltT = Number(xmlDataTest[xmlDataTest.length - 1].fltValue);
    if (fltT < 10.0 || fltT > 70) {
        dflt *= -1;
    }
    fltNew = String(fltT + dflt);
    xmlDataTest.push({ dt: dtNew, fltValue: fltNew });
    //trace("Datenpunkte: " + xmlDataTest.length);
}

클릭에서"시작"단추를 데이터 배열을 확장하는 모든 3 초지만,차트 화면에서는 동일하게 유지됩니다.

도움이 되었습니까?

해결책

살펴보 .에 코드,모든 데이터의 구조는 클래스(예: Array 이)해당 컬렉션(또는 CollectionView)동작하는 클래스로 래퍼로.을 사용할 때 wrapper 와 같은 기능 addItem(),그것은 이벤트를 전달을 듣고 그들을 알리 컬렉션가 변경되었습니다.로 설정할 dataProvider 하의 인스턴스 ArrayCollection 는 랩 xmlDataTest.

편집:또한,이후 나는지 아주 분명 원래,할 필요가 있다 모든 에 당신의 배열을 통해 ArrayCollection 래퍼입니다.의 모든 변경 사항의 기초를 사용하지 않는 데이터를 통해 이동하는 인터페이스 시스템의 나머지 부분이 없는 방법에 대해 알 수있는.

다른 팁

Rmeador가 설명하는 것처럼 배열 수집이 맞다고 생각합니다.

당신은 refreshBindings() 다음과 같은 플로치 방법 : idOfPlotChart.refreshBindings(); 데이터가 업데이트 된 후 vAppendDatum 기능.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top