Flex - ArgumentError: Ошибка № 2025: указанный DisplayObject должен быть дочерним элементом вызывающей стороны при использовании добавленного файла SWC

Я знаю, уже так много вопросов было задано здесь по этой теме ошибки #2025.

Но, в моем случае, это происходит при попытке использовать .swc файл в гибком проекте.

Я пытаюсь использовать один из моих библиотечных проектов в другой гибкий проект, добавив с помощью "Add swcфайл. Я успешно добавил его в свой новый проект как .swc файл.

Но, когда я пытаюсь использовать его в новом проекте, нажав на приложение в браузере, он показывает мне эту ошибку во время выполнения. Ниже приведен основной файл моего нового проекта.

NewSample.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                xmlns:swclib="*"
                layout="absolute">
    <swclib:Main width="100%" height="100%"/>
</mx:Application>

Трассировки стека:

ArgumentError: Ошибка № 2025: предоставленный объект DisplayObject должен быть дочерним по отношению к вызывающей стороне. в flash.display::DisplayObjectContainer/getChildIndex() в mx.managers::SystemManager/getChildIndex()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\ Manager \SystemManager.as:1772] в mx.managers::SystemManager/mouseDownHandler()[C:\autobuild\3.x\frameworks\projects\framework\src\mx\ Manager \SystemManager.as:3615]

Я не могу определить причину ошибки?


РЕДАКТИРОВАТЬ: это основной файл приложения .swc файл библиотеки.

Main.mxml

   <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                    xmlns:parsley="http://www.spicefactory.org/parsley"
                    minWidth="955" minHeight="600"
                    xmlns:custom="components.*"
                    horizontalScrollPolicy="off" 
                    layout="vertical" 
                    verticalScrollPolicy="off" xmlns:models="models.*" xmlns:views="views.*">
        <views:Header width="100%" height="50"/>
                <mx:HDividedBox id="hdv" width="100%" height="100%">
                    <views:ABC width="15%" height="100%"/>
                    <views:DEF width="65%" height="100%"/>
                    <views:XYZ width="20%" height="100%"/>
                </mx:HDividedBox>

        <parsley:ContextBuilder config="Conf"/>
    </mx:Application>

2 ответа

Решение

Вы действительно нуждаетесь Application? Application должен быть только верхний и основной класс. Возможные решения:

  1. Используйте другой контейнер (например, Canvas).
  2. Скомпилируйте приложение Main.mxml в swf, а затем загрузите его с помощью класса Loader.

Я бы предпочел использовать 1-й вариант.

Могу поспорить, что вы не проверяете, является ли объект (вы думаете дочерним) на самом деле дочерним (по вашему мнению родительским) объектом

Положить if там вроде:

if(parentObj.getChildren().indexOf(childObj) >= 0) {
    parentObj.removeChild(childObj);
} else {
    //whatever error logging you do goes here
}
Другие вопросы по тегам