Как запустить функцию, только когда переменная параметра была назначена? - PullRequest
1 голос
/ 27 февраля 2011

Мне нужен способ ожидания запуска команды parseCSV, пока событие readFile не обновит содержимое importData.Я видел несколько вещей о пользовательских диспетчерах событий, но не могу понять, как их использовать в моей ситуации.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2011

Как насчет простого добавления строки в функцию readFile?

public function readFile (event:Event):void {
    var filestream:FileStream = new FileStream();
    filestream.open(event.target as File, FileMode.READ);
    importData = filestream.readUTFBytes(filestream.bytesAvailable);
    parseCSV(importData);
    filestream.close();
}

Команда будет выполнена, как только будет установлена ​​importData.

Если вы хотите, чтобы пользовательский маршрут событий, вам нужно отправить свое собственное событие. Каждое событие имеет параметр типа, который представляет собой просто строку для идентификации. Например, Event.CHANGE - это то же самое, что и «change».

static public const CUSTOM = "myCustomEvent";

public function someConstructor():void {
    addEventListener(CUSTOM, onCustomEvent);
}

public function testDispatch():void{
    dispatchEvent(new Event(CUSTOM));
}

private function onCustomEvent(e:Event):void{
    trace("custom event Dispatched");
}

Так что вы можете попробовать что-то вроде этого.

public function importFile(event:MouseEvent):void {
        addEventListener(CUSTOM, onImport);
        var data:String = chooseFile();
    }

private function onImport(e:Event):void {
    parseCSV(importData);
}

public function readFile (event:Event):void {
    var filestream:FileStream = new FileStream();
    filestream.open(event.target as File, FileMode.READ);
    importData = filestream.readUTFBytes(filestream.bytesAvailable);
    dispatchEvent(new Event(CUSTOM));
    filestream.close();
}
2 голосов
/ 27 февраля 2011

Вам нужно будет добавить несколько обратных вызовов или добавить прослушиватели событий. Я предпочитаю обратные вызовы:

function importFile(...) {
     choseFile(function(file:File) {
         readFile(file, parseCSV);
     });
}

function choseFile(callback:Function) {
    ...
    file.addEventListener(Event.SELECT, function(event:Event) {
        callback(File(event.target));
    });
}

function readFile(file:File, callback:Function) {
    var data = ... read data from file ....;
    callback(data);
}
...