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

标签 actionscript-3 apache-flex

我遗漏了一些关于 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 的内容,但无法弄清楚这是否是它的预期应用程序,如果是,如何在此处应用它。我只在用于将数据传入/传出自定义组件的 setget 函数中看到过将 invalidateDisplayList 应用于自定义组件( see here ,例如)。在上面的示例中,我正在讨论的属性都是在自定义组件内部设置的(例如在 autoScale() 函数中)。不确定这是否会产生影响。

任何建议表示赞赏。

最佳答案

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

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

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

就您的情况而言,您不必自行无效,除非图表组件没有正确地使某些属性无效,否则您不需要调用 invalidate 或 validate 方法。

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

相关文章:

apache-flex - 获取特定组件上的所有事件监听器

actionscript-3 - 如何在没有任何 *.mxml 文件的情况下编译 maven/flex 项目?

flash - 在 Flash 中从中心缩放

actionscript-3 - 如何在 AS3(Flash 或 AIR 运行时)中实现 XML-RPC 服务器?

apache-flex - Flex/ActionScript - 围绕其中心旋转 Sprite

actionscript-3 - 弹性 : Determine if Space key is held down during MouseEvent

apache-flex - 柔性 : Accessing functions/components accross mxml pages

xml - 如何使用 Flex 从服务器读取 XML 数据?

java - 计算器中 x^y 的 Actionscript 函数

javascript - 在 actionscript 3.0 中使用函数创建对象