我遗漏了有关在 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()
函数。
我的想法,如果我错了,请纠正我,上面的程序重新绘制图表五次(函数中显示的每一行代码一次autoScale()
。是否可以告诉 Flex 忽略对组件的重新绘制更改,直到我发出了一些特定的命令,上面写着:“好的,现在我已经设置了我需要的一切——继续重绘图表”?
我一直在阅读invalidateDisplayList
,但无法弄清楚这是否是它的预期应用程序,如果是,如何在此处应用它。我只见过在用于将数据传入/传出自invalidateDisplayList
定义组件的set
函数中应用于自定义组件(例如,请参见此处)。在我上面的例子中,我正在讨论的属性都是在自定义组件中设置的(例如在函数中)。不确定这是否会有所作为。get
autoScale()
任何建议表示赞赏。