Actionscript 3 是否可以在flex中动态添加(.as)actionscript文件?

Actionscript 3 是否可以在flex中动态添加(.as)actionscript文件?,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我正在用flex开发应用程序,其中加载了动作脚本文件 <DrawingArea id="drawingArea" xmlns="*" width="100%" height="100%" add="drawingArea_addHandler(event)"/> 您将无法在内存中加载文件,然后在Acionscript中执行它(如果您需要的话)。但是,您可以根据一些事件(如用户单击或特定超时时间)在运行时创建DrawingArea或任何其他元素。在这种情况下,您的函数是内联定义的

我正在用flex开发应用程序,其中加载了动作脚本文件

<DrawingArea id="drawingArea"   xmlns="*" width="100%" height="100%" add="drawingArea_addHandler(event)"/>

您将无法在内存中加载文件,然后在Acionscript中执行它(如果您需要的话)。但是,您可以根据一些事件(如用户单击或特定超时时间)在运行时创建DrawingArea或任何其他元素。

在这种情况下,您的函数是内联定义的。除非你不给他们起名字,否则无论如何这是不可能的。 我建议

addEventListener(MouseEvent.MOUSE_DOWN, mouseDownFunction);
public function mouseDownFunction(event:MouseEvent = null ):void {
        x1 = mouseX;
        y1 = mouseY;
        isDrawing = true;
    }

然后,它们应该可以通过对象访问。DrawingArea.mousedown函数

我已对您的代码进行了更改

package
    {
        import flash.events.MouseEvent;

        import mx.core.UIComponent;

        public class DrawingArea
        {
            private var _target:UIComponent;

            private var _x1:Number;
            private var _y1:Number;

            private var _x2:Number;
            private var _y2:Number;

            [Bindable]
            private var _isDrawing:Boolean = false;

            private var _drawColor:uint = 0xFFFF00

            public function DrawingArea(target:UIComponent)
            {
                //TODO: implement function
                _target = target
                _target.addEventListener(MouseEvent.MOUSE_DOWN, downEvent, false, 0, true);
                _target.addEventListener(MouseEvent.MOUSE_UP, upEvent, false, 0, true);
                _target.addEventListener(MouseEvent.MOUSE_OUT, upEvent, false, 0, true);
            }

            private function downEvent(event:MouseEvent):void
            {
                _x1 = event.localX;
                _y1 = event.localY;
                _isDrawing = true;

                _target.addEventListener(MouseEvent.MOUSE_MOVE, moveEvent, false, 0, true);
            }

            private function moveEvent(event:MouseEvent):void
            {
                if (!event.buttonDown)
                {
                    _isDrawing = false;
                }

                _x2 = event.localX;
                _y2 = event.localY;
                if (_isDrawing)
                {
                    _target.graphics.lineStyle(2, _drawColor);
                    _target.graphics.moveTo(_x1, _y1);
                    _target.graphics.lineTo(_x2, _y2);
                    _x1 = _x2;
                    _y1 = _y2;
                }

            }

            private function upEvent(event:MouseEvent):void
            {
                _isDrawing = false;

                _target.removeEventListener(MouseEvent.MOUSE_MOVE, moveEvent);
            }

            public function set drawColor(value:uint): void{
                _drawColor = value;
            }

        }
    }
创建了一个类DrawingAreaView.mxml,其中,为DrawingArea创建了对象,并将该类本身作为容器传递

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns="components.*" xmlns:mx="http://www.adobe.com/2006/mxml"
           creationComplete="onInit();">

    <mx:Script>
        <![CDATA[
            import components.DrawingArea;

            private var drawingArea:DrawingArea;

            private function onInit():void {
                drawingArea = new DrawingArea(this);
            }
        ]]>
    </mx:Script>
</mx:Canvas>
在应用程序中使用上述类

<DrawingAreaView id="drawingArea" width="100%" height="100%"/>

or

private var _drawingAreaView:DrawingAreaView = new DrawingAreaView();

parentObject.addChild(_drawingAreaView); 

你说的动态是什么意思?编译应用程序之后或之前需要添加.as文件?@At Jevgenij Dmitrijev运行时My drawingArea是扩展uicomponent的独立类,如何在运行时绘制Area或任何其他元素?通过使用类似new drawingArea的内容创建新对象。您还可以查看getDefinitionByName函数,通过传入类名来创建实例。
<DrawingAreaView id="drawingArea" width="100%" height="100%"/>

or

private var _drawingAreaView:DrawingAreaView = new DrawingAreaView();

parentObject.addChild(_drawingAreaView);