错误/特征:
这是我面临的一个问题,作为更复杂的应用程序的一部分,但我把它缩小到这里的基础。当处理程序触发REMOVED_FROM_STAGE时,currentTarget仍然显示在显示列表中。我需要能够检测它和其他对象是否在此函数的显示列表中,但是在处理程序完成其操作之前,看起来有关currentTarget的所有信息都是不正确的。起初我认为这是一个渲染或框架问题,但我的输出显示它实际上更多的是remove()命令内部发生的问题。没有一个kludge解决方案,有人能够了解为什么会发生这种情况吗?
import flash.display.Sprite;
import flash.events.Event;
var sprite:Sprite = new Sprite();
addChild(sprite);
sprite.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStageHandler);
removeChild(sprite);
output();// shows it has been removed. No parent, no stage
function removedFromStageHandler(event:Event):void{
output();// Still in displaylist? Has parent and stage
}
function output():void{
trace("object = " + sprite);
trace(" parent = " + sprite.parent);
trace(" stage = " + sprite.stage);
}
注意:ADDED_TO_STAGE不存在这种奇怪的行为,因为对象在处理程序中报告其属性是正确的。
答案 0 :(得分:1)
来自adobe docs:
removedFromStage事件 在即将从显示列表中删除显示对象时调度,更多信息here
因此它是预期的行为,事件在项目从阶段中删除之前调度,当调度完成时,元素被删除。这允许您在删除项目之前执行诸如运行操作之类的操作,甚至可以根据某些条件阻止删除。