2013/09/29

クラス内のEventListenerをメイン側で取得する方法

クラス内でのEventListenerをメイン側で取得する方法を記載します。

オブジェクト指向プログラミングをしていると、クラスをたくさん作ることになります。この際に、メイン側からクラスを呼び出したけど、そのクラス内ではEventHandlerで処理していることは普通にあります。では、戻り値はどのように取得するか?

それはメイン側にもクラス内のEventListenerを追加してやることで対応します。ファイルを開くサンプルコードを記載します。

クラス側のコード
 package assets.src  
 {  
      import flash.events.Event;  
      import flash.filesystem.File;  
      import flash.filesystem.FileMode;  
      import flash.filesystem.FileStream;  
      import flash.events.EventDispatcher;  
      public class FileExtend extends EventDispatcher  
      {  
           private var fl_OpenFileStream:FileStream = new FileStream();// FileStream used to read from the file  
           private var fl_OpenFileChooser:File = File.documentsDirectory;// Default to the documents directory  
           public var m_fileData:String;  
           public function FileExtend()  
           {  
                // constructor code  
           }  
           private function eventHandler()  
           {  
           }  
           // Main function for opening a file;  
           public function fl_OpenFile():void  
           {  
                fl_OpenFileChooser.browseForOpen("Select a text file.");  
                fl_OpenFileChooser.addEventListener(Event.SELECT, fl_FileOpenSelected);  
           }  
           // Opens a FileStream object to read the file;  
           private function fl_FileOpenSelected(event:Event):void  
           {  
                fl_OpenFileChooser = event.target as File;  
                fl_OpenFileStream = new FileStream();  
                fl_OpenFileStream.addEventListener(Event.COMPLETE, fl_FileReadHandler);  
                fl_OpenFileStream.openAsync(fl_OpenFileChooser, FileMode.READ);  
           }  
           // Write data from the file to the Output Panel;  
           private function fl_FileReadHandler(event:Event):void  
           {  
                m_fileData = fl_OpenFileStream.readUTFBytes(fl_OpenFileStream.bytesAvailable);  
                // The data loaded from the file can now be used from the variable fileData.  
                // This example code displays data from the file in the Output panel.  
                
                dispatchEvent(event);
                fl_OpenFileStream.close();  
           }  
      }  
 }  

メイン側のコード
 var m_fileExtend:FileExtend;  
 private function btnImportCSV_Click(event:MouseEvent):void  
 {  
      m_fileExtend = new FileExtend();  
      m_fileExtend.addEventListener(Event.COMPLETE, catchFileReadHandler);  
      m_fileExtend.fl_OpenFile();  
 }  
 private function catchFileReadHandler(event:Event)  
 {  
      trace(m_fileExtend.m_fileData);  
 }  

http://stackoverflow.com/questions/7587665/as3-returning-a-variable-from-an-event-listener-function
http://stackoverflow.com/questions/8813790/possible-to-listen-for-event-then-return-result-from-class

0 件のコメント:

コメントを投稿