儿童而不是父母的事件登记

时间:2010-10-26 16:10:56

标签: actionscript-3 flash-cs5

希望这里有一个简单的问题。我已经设置了一个“LayoutPage”自定义类(基于MovieClip),我正在尝试创建一个“选定”的行为。

当我从我的自定义类中分配“addEventListener(MouseEvent.CLICK,toggleSelection)”时,一切都按预期工作,单击该类的任何对象都会显示正确的行为。

现在,我想通过添加键盘修改器扩展功能来扩展选择或替换它。

为此,我考虑将“addEventListener”移出类,并将其放在父类中(我的“PageLayout”类,其中所有“LayoutPage”都存在)。但通过这样做,click事件不再在“LayoutPage”类上注册,而是在其各个子项(页面图标,页码文本字段,页面突出显示形状等)上注册。

任何人都可以解释为什么会发生这种情况以及如何规避它吗?

TIA

1 个答案:

答案 0 :(得分:1)

无论你把addEventListener放在哪里,都应该发生这种情况。这是因为默认情况下mouseChildren处于启用状态。最好在 LayoutPage 类中关闭它,如下所示:

myLayoutPage.mouseChildren = false;

实际问题是use可能使用currentTarget来引用在事件处理程序方法中单击的项。请查看currentTargettarget的说明,以便了解它们之间的区别。

一个不错的选择是在 PageLayout 级别添加您的监听器,但是将其专门添加到每个 LayoutPage 子级中,如下所示:

myLayoutPage.addEventListener(MouseEvent.CLICK, toggleSelection);

这样您就可以在处理程序中使用target。但最好仍然在每个 LayoutPage 实例上将mouseChildren切换为false。