オブジェクト指向プログラミングをしていると、クラスをたくさん作ることになります。この際に、メイン側からクラスを呼び出したけど、そのクラス内では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 件のコメント:
コメントを投稿