Flex / Flash Builder基础:为什么这段代码不起作用?

时间:2011-03-27 00:38:05

标签: flex actionscript-3 flash-builder

我第一次尝试使用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);

        }
    }
}

此代码不执行任何操作。但是当我使用WYSIWYG设计视图添加Flex组件时,组件IS可见。

另一个关键问题:Flash Builder无法连接到调试器,即使我现在已经安装了两次。有人能帮我一下吗?我已经确定我的防火墙已关闭,但这可能导致问题吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

<?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);

        }
    }
}

干杯, 罗布

答案 1 :(得分:1)

我怀疑问题在于你:

a)切勿将Spiro类作为子容器添加到容器中。 b)切勿设置Spiro类的高度或宽度。

你也会遇到问题,因为Application标签是一个spark组件。如果使用AddChild,则会抛出错误,因为您应该使用addElement。如果使用addElement方法,则会出现错误,因为Spiro类未实现IVisualElement接口。

所以,从我的角度来看,你有几个选择:

1)使用Spiro类实现IVisualElement接口。从那里你可以使用addElement方法将它作为子项添加到Application中(通常在LifeCycle方法createChildren());并且还给它一个高度和宽度(通常在lifeCycle方法updateDisplayList()中)。

2)创建一个扩展UIComponent的类,并使用addChild方法在那里添加Spiro类。然后将“wrapper”类添加为应用程序中的元素。