что добавитьEventListener при прослушивании пользовательских событий? - PullRequest
0 голосов
/ 16 марта 2011

Я отправляю событие, когда SQL-запрос не возвращает совпадений, чтобы я мог продолжить добавление в базу данных. Похоже, actionScript требует, чтобы я прикрепил слушатель к чему-либо, но у меня нет переменные, которые кажутся логическими кандидатами в тот момент, когда я нахожусь в моем коде.

Я просто хочу прослушать событие isNewRecord, которое можно вызвать, чтобы я мог затем выполнить запрос вставки; прямо сейчас он говорит о вызове возможно неопределенного метода для addEventListern и для dispatchEvent

public function addBG(BG:Number, datetime:String, batch:Boolean = false):void{
        checkRecord('Gb', datetime, matchRecord);

        addEventListener("isNewRecord", recordExists);

        function recordExists()
        {/*code to execute query*/}

public function matchRecord(result:SQLResult):void {
        var match:String = result.data[0];
        if (match == null) {
            var allClear:Event = new Event("isNewRecord");
            dispatchEvent(allClear);
        }
    }

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Ваш код содержит ошибки.У вас есть функция внутри функции.

Кроме того, ваш код расширяет класс EventDispatcher (или любой класс, который его расширяет, например Sprite, MovieClip и т. Д.) Убедитесь, что это так.*

0 голосов
/ 16 марта 2011

Вам не нужно использовать события.Ваша обработка SQLResult кажется синхронной, задержка отсутствует из-за какого-либо взаимодействия с пользователем, сервером или чем-либо, что может занять некоторое время.

Когда Flash выполняет ваш код, он выполняет следующие действия:

checkRecord('Gb', datetime, matchRecord);
//then
var match:String = result.data[0];
if (match == null) {
    var allClear:Event = new Event("isNewRecord");
    dispatchEvent(allClear);
}
//and finally
addEventListener("isNewRecord", recordExists);

Событие отправляется до добавления слушателя.Вот что вы должны сделать:

public function addBG(BG:Number, datetime:String, batch:Boolean = false):void
{
        if (checkRecord('Gb', datetime, matchRecord))
        {
            recordExists();
        }
}

public function recordExists():void
{/*code to execute query*/}

public function matchRecord(result:SQLResult):Boolean{
        var match:String = result.data[0];
        if (match == null) {
            return true;
        }
        return false;
}

Приветствия

...