适用于主要应用程序事件的Flex 4事件侦听器

时间:2012-04-26 02:15:27

标签: flash flex events air flex4

Flex 4中是否有办法设计一个皮肤,以便它可以监听由我的主应用程序调度的事件,在这种情况下,它是<s:WindowedApplication>类的一个实例?

我尝试将一个事件监听器添加到皮肤中的contentGroup,仅用于踢。毫不奇怪,它没有用。

有什么想法吗?

感谢您的时间。

1 个答案:

答案 0 :(得分:4)

您想为哪个组件设计皮肤?

如果您正在为WindowedApplication设计外观并希望侦听从WindowedApplication类触发的事件;好的。您可以使用外观中的hostComponent变量来侦听WindowedApplication实例上的所述事件。

我相信hostComponent属性是基于皮肤元数据自动创建的;除非您正在创建移动皮肤,否则文档会告诉您手动创建它。从概念上讲是这样的:

public var hostComponent : WindowedApplication;

代码中的某个未来点:

hostComponent.addEventListener('myCustomEvent',myEventListener);

我不知道Flex Component Lifecycle在什么时候设置了hostComponent属性。我确信你可以在creationComplete事件期间添加没有问题的事件监听器;但也许在生命周期的早期阶段。

如果这不是你想要做的,你可以通过引用FlexGlobals.topLevelApplication变量来监听代码中任何地方的主要应用程序上的事件 - 包括皮肤类:

var tla : WindowedApplication = FlexGlobals.topLevelApplication as WindowedApplication;
tla.addEventListener('myCustomEvent',myEventListener);

这被认为是封装中断,我不确定我是否会推荐它。应该用事件进行沟通;但是应该使用执行方法和属性进行通信。在这种情况下,您正在使用事件进行通信。

让皮肤类监听hostComponent上的事件有点像横向工作 - 不是向上或向下。我对此也有不同的感受。