从flexGlobals.topLevelApplication获取内部组件

时间:2013-03-22 04:38:02

标签: actionscript-3 flex flex4

我觉得内部组件的访问方式比我所知道的要好。 我知道我们可以访问任何内部组件,如: FlexGlobals.topLevelApplication.someChild1.someChild2.someChild3 ...等等

我有一个包含多个父组件层次结构的组件。我想知道无论如何我可以访问最后一个孩子,而不会引用它的所有父母。

我需要在该组件上触发事件。

FlexGlobals.topLevelApplication.child1.child2.child3.dispatchEvent(new Event('clearData', true));

更新:我尝试了你在第1点中建议的方式。我在子组件上添加了事件监听器,并尝试从动作脚本文件中调度它,但它没有被发现。\

child3.addEventLisener('clearData', clearHandler);

然后我发送了一些事情:

dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true)

3 个答案:

答案 0 :(得分:1)

尝试添加

FlexGlobals.topLevelApplication.systemManger.addEventLisener('clearData', clearHandler);
<3>在child3中

并从任何你想要的地方发布,

用于调度使用以下

FlexGlobals.topLevelApplication.systemManager.dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true)

答案 1 :(得分:0)

我认为你应该在初始化时降低组件级别和addEventListener。 并从你想要的任何地方派遣。

其他方法是这样做,您需要在creationComplete上的对象中保存组件引用(ID)。在模型中保存它的refence。现在您可以随时随地访问它。并做你想做的事。

我也是这样做的,我将屏幕组件参考保存在一个数组中,然后访问它,我需要动态验证所有组件。

否则你需要嵌套循环来获得你需要的孩子。

答案 2 :(得分:0)

我如何从问题中理解没有使用应用程序设计的良好原则,但这是另一个问题。
在您的情况下,您可以将stage用作bubbles事件的全局currentTarget。来自displayObject的Dispatch事件,其中bubbles = true;在目标显示对象监听事件中,舞台对象具有/截取捕获阶段。

在任何displayObject中:

dispatchEvent(new Event("myEvent", true));
目标displayObject中的

// add ADDED_TO_STAGE event listener in constructor or when component creation complete
protected function component_creationCompleteHandler(event:FlexEvent):void
{
    addEventListener(Event.ADDED_TO_STAGE, onAddToStage);
}

..

protected function onAddToStage(event:Event):void
{
    stage.addEventListener("myEvent", eventHandler, true);
}

protected function eventHandler(event:Event):void
{
    trace("eventHandler");
}

它比使用FlexGlobals对象的引用要好。代码更灵活。

相关问题