我觉得内部组件的访问方式比我所知道的要好。 我知道我们可以访问任何内部组件,如: 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)
答案 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对象的引用要好。代码更灵活。