gpt4 book ai didi

actionscript-3 - 弹性/AS3 : how to manage re-draw of chart when changing multiple chart properties?

转载 作者:行者123 更新时间:2023-12-04 18:16:17 24 4
gpt4 key购买 nike

我遗漏了有关在 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用于将数据传入/传出自定义组件的函数(例如 see here )。在上面的示例中,我正在讨论的属性都设置在自定义组件中(例如,在 autoScale() 函数中)。不确定这是否会有所作为。

任何建议表示赞赏。

最佳答案

Flex 的组件生命周期将防止图表被重绘 5 次,因为属性在您描述的语句中被修改了 5 次,这就是生命周期的美妙之处。

简而言之,大多数属性更改不会立即转换为绘图,而是会引发一个标志,指示属性已更改,这样的过程称为失效。然后组件将等到下一个重绘周期,通常是一帧之后(Flash 是基于帧的动画环境)。当重绘发生时,代码可以整体评估所有情况。

Flex 的生命周期提供了细粒度的失效。开发者可以选择invalidateProperties() , invalidationSize() , invalidatDisplayList()invalidateSkinState() (对于 Spark 组件)。随着 Flex 经历“验证”这些失效的生命周期,commitProperties() , measure() , updateDisplayList(w, h) , getCurrentSkinState()将被调用来执行验证。您可以找到有关组件生命周期的更多信息 here , here , 和 here .

在您的情况下,您不必自己使无效,除非图表组件没有正确使某些属性无效,否则您不需要调用无效或验证方法。

关于actionscript-3 - 弹性/AS3 : how to manage re-draw of chart when changing multiple chart properties?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com