如何确定是否已呈现DisplayObject

时间:2012-06-03 01:07:35

标签: flex

我很疑惑visible的{​​{1}}属性是否为:

  • 来自Flex 的指示显示对象是否可见。
  • 指示Flex 显示显示对象的指令。

我问,因为我正在使用Flex Pilot自动化一些Flex测试,我需要确定显示对象何时可以点击。在我正在测试的应用程序中,可点击似乎意味着呈现。

鉴于应用程序和我的测试的性质,我认为观察DisplayObject事件是不可行的。我需要一种方法来检测显示对象是否在给定时刻根据其属性的值及其容器的属性可见。

据我所知,即使显示对象的updateCompleted属性为true,只有当所有容器都可见时,它才会可见。这意味着我必须通过编写ActionScript方法来扩展Flex Pilot以确定显示对象及其容器是否都具有visible。但是我担心即使是那种方法也不会告诉我显示对象是否真的被渲染,因此可以点击。

我的谜题来自阅读Adobe的两个描述。

"About creating advanced components"文档表明,在呈现显示对象后,Flex会设置visible=true属性。在本说明书中,设置值是Flex的工作, 因此,该值是Flex 指示显示对象是否可见。

另一方面, Adobe的description of the visible property表明该属性是可写的。代码示例表明,如果应用程序更改了值,Flex将通过显示或隐藏显示对象来响应。在此描述中,应用程序将值设置为Flex 指令以显示对象。我猜测在这种情况下,Flex会重新呈现显示对象(如果visiblevisible更改为false)或其容器(如果true从{{{}}更改1}}到visible)。

所以有两个主要问题:

这两种方式都使用true属性,既可以作为Flex的显示对象可见性的指示,也可以指示Flex是否显示对象?

如果应用程序将false从false更改为true,那么显示对象何时实际可见?在setter返回时是否可见?或者设置属性只是安排对象在稍后的事件中变得可见?如果是后者,则意味着可能存在visible为真的持续时间,但尚未呈现显示对象。如果是这种情况,我不知道如何根据给定时刻的显示对象的状态来确定是否已经渲染了显示对象。

1 个答案:

答案 0 :(得分:3)

要呈现DisplayObject有一些关键约束。首先,它必须在显示列表中。必须将visible设置为true,否则将从渲染中忽略它。最后一个关键方面是所谓的elastic race track,它基本上描述了事件处理,代码执行和渲染的发生时间。因此,为FlexEvent.UPDATE_COMPLETE实现事件处理程序并没有错,因为在属性更改时会调度这些事件处理程序,这会更改屏幕上组件的呈现表示。

这两种方式都使用了可见属性,既可以作为Flex关于显示对象可见性的指示,也可以指示Flex是否显示对象? 是的,在调度FlexEvent.CREATION_COMPLETE之前,框架最初将visible属性设置为true,因此Flash播放器不会在某个状态下绘制组件(我不是指Flex视图状态),这是介于两者之间构建并具有完整的初始化视图。

如果应用程序从false变为可见,则显示对象何时实际可见?在下一个渲染周期发生后。