0

我觉得访问内部组件的方式比我所知道的要好。我知道我们可以访问任何内部组件,例如: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)
4

3 回答 3

1

尝试添加

FlexGlobals.topLevelApplication.systemManger.addEventLisener('clearData', clearHandler);

在孩子3

并将它从任何你想去的地方驱散,

调度使用以下

FlexGlobals.topLevelApplication.systemManager.dispatchEvent(new Event(modelApp.CLEAR_PALETTE, true)
于 2013-03-22T07:56:51.290 回答
0

我认为您应该深入到组件级别并在初始化时添加事件监听器。并从您想要的任何地方发送。

另一种方法是这样做,您需要在创建完成时将组件引用(ID)保存在对象中。将其参考保存在您的模型中。现在您可以随时随地访问它。做任何你想做的事。

我也是这样做的,我将我的屏幕组件引用保存在一个数组中,并在我需要动态验证所有组件的地方访问它。

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

于 2013-03-22T04:49:17.177 回答
0

我如何从这个问题中理解没有使用应用程序设计的良好原则,但这是另一个问题。
在您的情况下,您可以将阶段用作气泡事件的全局 currentTarget。来自 displayObject 的调度事件,气泡 = true;在目标显示对象中侦听事件,带有/不捕获阶段的阶段对象。

在任何显示对象中:

dispatchEvent(new Event("myEvent", true));

在目标显示对象中:

// 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 对象的引用要好。代码更灵活。

于 2013-03-22T08:00:48.343 回答