2012-04-26 71 views
0

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

我试着在皮肤中为contentGroup添加事件监听器,只是为了踢腿。毫不奇怪,它没有奏效。

任何想法?

谢谢你的时间。

回答

4

你想设计一个皮肤的组件?

如果您正在为WindowedApplication设计一个外观,并且想要监听WindowedApplication类触发的事件;好的。您可以使用外观中的hostComponent变量来侦听WindowedApplication实例上的所述事件。

我相信hostComponent属性是基于皮肤元数据自动创建的;除非你创建一个移动皮肤,然后文档告诉你手动创建它。从概念上讲是这样的:

public var hostComponent : WindowedApplication; 

在代码中的未来的某个时刻:

hostComponent.addEventListener('myCustomEvent',myEventListener); 

我不知道在设置点什么在Flex组件生命周期中的hostComponent属性。我相信你可以在creationComplete事件期间添加事件监听器而不是事件;但也许在生命周期的更早期。

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

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

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

让外观类监听hostComponent上的事件有点像侧身工作 - 不是向上或向下。我对此也有复杂的感觉。

+0

正是我需要的!谢谢!好好解释一下吧! – 2012-04-26 02:40:16

+0

对于它的价值,我完全同意你的99%。最后的1%允许主人在皮肤上发生事件。我会说这是好的,不会违反父母规定。主持人可以很容易地换出一个新的皮肤,不会中断,但与主机从皮肤获取事件相反 - 这会变得棘手,它可能很容易“打破”或不按预期触发 - 但只要它正在经历一个事件 - 这仍然是一个“封装护城河”,没有一个很好的参考 - (或者至少它不应该,但像我说的 - 棘手);)。 – 2012-04-26 03:35:02