使用哪种invalidate方法

时间:2015-01-02 10:50:17

标签: actionscript-3 flex invalidation

我对使用哪种无效方法以及何时使用它感到困惑。我需要更改组件的x和y,在这种情况下,应该调用失效方法进行优化,但我不知道哪一个以及何时完全

target.addElement(node);
node.x = 100 + target.horizontalScrollPosition;
node.y = 100 + target.verticalScrollPosition;

节点和目标都是组

1 个答案:

答案 0 :(得分:1)

这取决于组件,也许你根本不需要打电话。从给定的代码片段开始,我说invalidateSize()。但是容器通常可以很好地测量它们的尺寸属性。如果您需要更改组件的显示方式,invalidateDisplayList可能是一个很好的调用。

因此,一般来说,它取决于您正在实施的组件(超类型等)。

编辑: 由于两个实例都是组,因此您根本不应该调用任何失效方法。您只能在实现具有其他属性的自定义组件时调用方法。在群组的情况下,事先已经为您完成了任何事情。实现了组件实时循环,各种布局提供了一个舒适的间接级别。

当您扩展Group(或任何其他组件)时,您应该熟悉组件实时循环。

经验法则:

  1. 忽略纯MXML中的失效调用,因为它是由MXML编译器和组件本身完成的。
  2. 在重写的setter中使用失效调用,这会改变组件的状态(即使在MXML中)。如果在任何地方都使用了setter,这通常会导致组件的干净而简单的设计 - 甚至在组件私有方法中也是如此。
  3. 谨慎使用validateSizevalidateNow等,因为这些是简单的同步快捷方式,可避免组件实时循环。
  4. 失效实时循环基于闪存播放器弹性赛道,它在处理代码的不同方面划分数据的渲染和处理。

    关于无效呼叫背后的想法的进一步阅读: 更新了弹性赛道[1] 弹性赛道[2]

    1. [1]:http://www.craftymind.com/updated-elastic-racetrack-for-flash-9-and-avm2/
    2. [2]:http://tedpatrick.com/2005/07/19/flash-player-mental-model-the-elastic-racetrack/