2012-04-24 62 views
0

我正在開發應用程序在Flex中加載了動作腳本文件。是否可以在flex中動態添加(.as)動作腳本文件?

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

我需要動態地添加它,如何做到這一點?指引我

更新 這是我的繪圖區域如何創建var da:DrawingArea=new DrawingArea 如何訪問監聽功能? public function DrawingArea() super();

 addEventListener(FlexEvent.CREATION_COMPLETE, function(event:FlexEvent):void { 
      erase(); 
     }); 

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

     addEventListener(MouseEvent.MOUSE_MOVE, function(event:MouseEvent):void { 
      if (!event.buttonDown) 
      { 
       isDrawing = false; 
      } 

      x2 = mouseX; 
      y2 = mouseY; 
      if (isDrawing) 
      { 
       graphics.lineStyle(2, drawColor); 
       graphics.moveTo(x1, y1); 
       graphics.lineTo(x2, y2); 
       x1 = x2; 
       y1 = y2; 
      } 
     }); 

     addEventListener(MouseEvent.MOUSE_UP, function(event:MouseEvent):void { 
      isDrawing = false; 
     }); 
    } 
+0

你是什麼意思動態? .as文件需要在編譯應用程序之前或之後添加? – 2012-04-24 09:40:48

+0

@ Jevgenij Dmitrijev運行時 – Ela 2012-04-24 10:05:12

回答

0

我已經對您的代碼進行了更改。

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> 

在Application中使用上面的類。

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

or 

private var _drawingAreaView:DrawingAreaView = new DrawingAreaView(); 

parentObject.addChild(_drawingAreaView); 
0

你將無法在內存中加載文件,然後在Acionscript中執行它,如果這是你想要的。但是,您可以執行的操作是基於某個事件(例如用戶單擊或特定的超時期限)在運行時創建DrawingArea(或任何其他元素)。

+0

我的drawingArea是一個獨立的類,它擴展了uicomponent,如何在運行時DrawingArea(或任何其他元素)? – Ela 2012-04-24 10:08:36

+0

通過使用'new DrawingArea()'之類的東西來創建一個新對象。您還可以查看'getDefintionByName'函數來創建一個實例,方法是傳入一個類名稱。 – dirkgently 2012-04-24 10:29:18

+0

看到我的更新,我添加了代碼 – Ela 2012-04-24 10:37:40

0

在這種情況下,你的函數是內聯定義的。直到你不給他們的名字,這將是不可能的。 我建議

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

那麼他們就應該通過對象變得accesable。 DrawingArea.mouseDownFunction()