Flexでのグラフ作成に関する基本的なことが欠けています。チャートのx軸とy軸の制限を変更し、チャートの新しいデータ系列を提供する自動スケール機能を含むカスタムチャートコンポーネントを作成しています。カスタムチャートコンポーネントは次のようになります。
<s:Group ...>
...
private function autoScale():void {
...
// this is where I compute newXmin, newXmax, newYmin, newYmax, startIndex, endIndex
...
haxis.minimum = newXmin;
haxis.maximum = newXmax;
vaxis.minimum = newYmin;
vaxis.maximum = newYmax;
myChart.series.dataProvider = myData.slice(startIndex, endIndex+1);
}
...
<mx:LineChart id="myChart">
<mx:horizontalAxis>
<charts:MyAxis id="haxis" labelFunction="setXLabels()"/>
</mx:horizontalAxis>
<mx:verticalAxis>
<mx:LinearAxis id="vaxis" labelFunction="setYLabels()"/>
</mx:verticalAxis>
</mx:LineChart>
...
</s:Group>
ユーザーはいつでもズームイン/ズームアウト(コードは表示されていません)でき、autoScale()
関数を呼び出します。
私の考えでは、間違っている場合は訂正してください。上記のプログラムは、チャートを5回再描画します(関数に表示されるコードの各行に1回)autoScale()
。Flexにコンポーネントへの変更の再描画を無視するように指示することはできますか? 「OK、必要なものをすべて設定しました。先に進んでグラフを再描画してください」という特定のコマンドを発行しますか?
私はについて読んinvalidateDisplayList
でいますが、これが意図されたアプリケーションであるかどうか、もしそうなら、ここでそれを適用する方法を理解することができませんでした。カスタムコンポーネントにデータを出し入れするために使用される関数と関数invalidateDisplayList
のカスタムコンポーネントに適用されるのを見たことがあります(たとえば、ここを参照)。上記の例では、説明しているプロパティはすべてカスタムコンポーネント内(関数など)で設定されています。それが違いを生むかどうかはわかりません。set
get
autoScale()
アドバイスをいただければ幸いです。