Основы Flex / Flash Builder: почему этот код не работает? - PullRequest
0 голосов
/ 27 марта 2011

Я впервые пробовал Flash Builder и не могу заставить его работать ...

Во-первых, у меня есть немного базового кода:

MXML:

<?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" xmlns:ns1="*">
    <fx:Script>
        <![CDATA[
            public function initApp():void 
            {
                var spiro:Spiro = new Spiro();

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

</s:Application>

А также AS3:

package
{
    import flash.display.Sprite;

    public class Spiro extends Sprite
    {
        public function Spiro()
        {
            var mainRect:Sprite = new Sprite();

            mainRect.graphics.beginFill(0x0000FF);

            mainRect.graphics.drawRect(0, 0, 100, 100);
            mainRect.graphics.endFill();
            addChild(mainRect);

        }
    }
}

Этот код ничего не делает.Но когда я добавляю компонент Flex с использованием представления WYSIWYG Design, этот компонент становится видимым.

Еще одна ключевая проблема: Flash Builder не может подключиться к отладчику, хотя я установил его дважды.Может ли кто-нибудь помочь мне здесь?Я убедился, что мой брандмауэр выключен, но могут ли это вызывать проблемы?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 27 марта 2011
<?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" xmlns:ns1="*"
creationComplete="initApp();">
    <fx:Script>
        <![CDATA[
            public function initApp():void 
            {
                var spiro:Spiro = new Spiro();
                addElement(spiro);
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

</s:Application>

Вы не вызывали свой initApp метод. Вы можете вызвать его, когда создание вашего приложения Flex будет завершено, и оно вызовет событие creationComplete.

И ваш класс Spiro должен расширять UIComponent, потому что вы не можете добавить Sprite в приложение Flex ни в качестве дочернего элемента, ни в качестве элемента:

package
{
    import flash.display.Sprite;
    import mx.core.UIComponent;

    public class Spiro extends UIComponent
    {
        public function Spiro()
        {
            var mainRect:Sprite = new Sprite();

            mainRect.graphics.beginFill(0x0000FF);

            mainRect.graphics.drawRect(0, 0, 100, 100);
            mainRect.graphics.endFill();
            addChild(mainRect);

        }
    }
}

Ура, Rob

1 голос
/ 27 марта 2011

Я подозреваю, что проблема в том, что вы:

a) Никогда не добавляйте класс Spiro как дочерний элемент в контейнер.б) Никогда не устанавливайте высоту или ширину класса Spiro.

У вас также будут проблемы, потому что тег Application является компонентом spark.Если вы используете AddChild, выдается ошибка, потому что вы должны использовать addElement.Если вы используете метод addElement, вы получите ошибку, потому что ваш класс Spiro не реализует интерфейс IVisualElement.

Итак, с моей точки зрения, у вас есть несколько вариантов:

1) Реализуйте интерфейс IVisualElement с вашим классом Spiro.Оттуда вы сможете добавить его как дочерний элемент в Приложение, используя метод addElement (обычно в методе LifeCycle createChildren ());а также задайте его высоту и ширину (обычно в методе lifeCycle updateDisplayList ()).

2) Создайте класс, расширяющий UIComponent, и добавьте туда свой класс Spiro, используя метод addChild.Затем добавьте этот класс-оболочку в качестве элемента в ваше приложение.

...