Adobe Flash Buider (flex4): Ошибка № 2025 или Ошибка: addChild () недоступна в этом классе. Вместо этого используйте addElement () - PullRequest
2 голосов
/ 21 мая 2010

Я полный новичок во Flex, поэтому извиняюсь за свою глупость.Я искал ответ, но не нашел ничего, что могло бы помочь.

Что я пытаюсь сделать: перенести этот пример http://www.adobe.com/devnet/air/flex/articles/flex_air_codebase_print.html на Flash Builder 4.

Все вроде бы хорошо, но с одной стороны.Когда я использую оригинальный код для приложения Air

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       creationComplete="onApplicationComplete()">
<fx:Script>
    <![CDATA[
        private static const neededForCompilation:AirGeneralImplementation = null;
        private function onApplicationComplete():void
        {
            var can:MainCanvas = new MainCanvas();
            this.addChild(can); 
            can.labelMessage = "Loaded in an AIR Application ";
        }
    ]]>
</fx:Script>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>


</s:WindowedApplication>

, я получаю эту ошибку времени выполнения

Ошибка: addChild () недоступна в этом классе.Вместо этого используйте addElement () или измените скин, если он у вас есть.at spark.components.supportClasses :: SkinnableComponent / addChild () [E: \ dev \ 4.0.0 \ frameworks \ projects \ spark \ src \ spark \ components \ supportClasses \ SkinnableComponent.as: 1038]

Если я заменил код на

this.addElement(can);

Все загружается хорошо, но в первый раз, когда я пытаюсь нажать любую из кнопок на основном холсте, я получаю следующую ошибку во время выполнения

ArgumentError: Ошибка # 2025: предоставленный объект DisplayObject должен быть дочерним по отношению к вызывающей стороне.на flash.display :: DisplayObjectContainer / getChildIndex () на mx.managers :: SystemManager / getChildIndex () [E: \ dev \ 4.0.0 \ frameworks \ projects \ framework \ src \ mx \ Manager \ SystemManager.as: 1665]в mx.managers.systemClasses :: ActiveWindowManager / mouseDownHandler () [E: \ dev \ 4.0.0 \ frameworks \ projects \ framework \ src \ mx \ Manager \ systemClasses \ ActiveWindowManager.as: 437]

вот супер простой код для основного холста

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="init();">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script source="main.as" />
    <mx:Label id="lblMessage" text="The UI from the shared Flex app BothCode" x="433" y="112"/>
    <s:Button x="433" y="141" click="saveFile();" label="Save File"/>
    <s:Button x="601" y="141" click="GeneralFactory.getGeneralInstance().airOnlyFunctionality();" label="Air Only"/>
</s:Application>

Любая помощь будет очень цениться.И любые указания на то, как настроить проект, который может компилироваться как в Air, так и во Flash, при совместном использовании одного и того же кода, все для Flex 4, также будут высоко оценены.

спасибо!

Ответы [ 2 ]

2 голосов
/ 25 июня 2010

Я столкнулся с той же проблемой, используя это руководство для Flex 4. Я сделал то же самое, что и вы, и использовал компонент для основного холста. Однако в учебнике используется , решение, которое я нашел, состояло в том, чтобы заменить основной холст с на . Кажется, проблема заключается во внедрении приложения в приложение.

0 голосов
/ 23 мая 2010

Код по этой ссылке был написан с использованием Flex 3.5 SDK или ниже. Вы используете новый Flex 4 SDK (по умолчанию для Flash Builder). Вы можете сделать следующее:
1. войдите в код и сделайте все необходимые изменения, чтобы он работал для Flex 4 SDK.
2. настроить новый проект с помощью Flex 3 SDK (выберите «Использовать определенный SDK» и выберите Flex 3 из выпадающего списка в окне «Новый проект»)
Я бы предложил перейти ко второму варианту, заставить его работать, и как только вы немного углубитесь в flex 4, вы можете сделать первый вариант.

Приветствие.

...