ArgumentError: Ошибка № 2025: предоставленный объект DisplayObject должен быть дочерним по отношению к ошибке вызывающей стороны - AS - PullRequest
0 голосов
/ 22 марта 2010

У меня есть этот фрагмент кода внутри функции, которая проверяет, существует ли объект на сцене, и удаляет его:

public function closeContent(e:MouseEvent):void { 
    removeChild(txt);
    removeChild(ldr.content);
    removeChild(_closeButton);
    container_mc.visible = false;
    statusText.text="";
    if (contains(submitButton)) {
        removeChild(submitButton);
    }
    if (contains(saveinfoButton)) {
        removeChild(saveinfoButton);
    }
}

Я пытался изменить stage с this и root, но всегда получаю эту ошибку ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller

Ответы [ 3 ]

3 голосов
/ 23 марта 2010

Сигнал об ошибке, который вы пытаетесь удалить DisplayObject с removeChild, который явно не является потомком DisplayObjectContainer, из которого выполняется этот код.

Один из способов решения этой проблемы - проверить, является ли объект, который вы пытаетесь удалить, на самом деле дочерним по отношению к контейнеру, используя contains. Вы делаете это для некоторых объектов, которые вы удаляете (submitButton и saveinfoButton), но не для некоторых других.

Попробуйте обернуть removeChild вызовы txt, ldr.content и _closeButton в операторы if, которые используют contains для проверки наличия этих DisplayObject в контейнере.

0 голосов
/ 10 сентября 2012

Попробуйте это:

public function closeContent(e:MouseEvent):void { 
    removeChild(txt);
    removeChild(ldr.content);
    removeChild(_closeButton);
    container_mc.visible = false;
    statusText.text="";
    if (contains(submitButton)) {
        removeChild(submitButton);
        removeChild(saveinfoButton);
    }
}

Вы можете добавить оба элемента для удаления в условном выражении с помощью &&:

    if (contains(submitButton && saveinfoButton)) {
0 голосов
/ 23 марта 2010

Попробуйте с:

e.currentTarget.parent.removeChild(txt);  
e.currentTarget.parent.removeChild(ldr.content)  
etc.
...