0

我很困惑 的visible属性是否DisplayObject为:

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

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

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

我了解即使显示对象的visible属性为 true,也只有在其所有容器也可见时才可见。这意味着我必须通过编写一个 ActionScript 方法来扩展 Flex Pilot,以确定显示对象及其容器是否都具有visible=true. 但我担心即使是那个方法也不能确定显示对象是否真的被渲染,因此是可点击的。

我的困惑来自阅读 Adob​​e 的两个描述。

关于创建高级组件”文档建议该visible属性由 Flex 在呈现显示对象后设置。在此描述中,设置值是 Flex 的工作,因此该值是来自 Flex的对显示对象是否可见的指示。

另一方面,Adobe 对该属性的描述表明visible该属性是可写的。并且代码示例表明,如果应用程序更改了该值,Flex 将通过显示或隐藏显示对象来做出响应。在此描述中,应用程序将该值设置为向 Flex显示对象的指令。我猜在这种情况下,Flex 会重新渲染显示对象(如果visiblefalseto更改true)或其容器(如果visibletrueto更改false)。

所以两个主要问题:

属性是否visible以这两种方式使用,既作为来自 Flex 的关于显示对象可见性的指示,又作为向 Flex 指示是否显示对象的指示?

如果应用程序visible从 false 变为 true,那么显示对象何时真正可见? 设置器返回时是否可见?或者设置属性只是安排对象在以后的某个事件中变得可见?如果是后者,则意味着可能有一段时间visible为真,但显示对象尚未渲染。如果是这种情况,我不知道如何从给定时刻的显示对象的状态来确定显示对象是否已被渲染。

4

1 回答 1

3

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

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

如果应用程序将可见从 false 更改为 true,那么显示对象何时真正变得可见?在下一个渲染周期发生之后。

于 2012-06-03T08:13:41.583 回答