在侦听自定义事件时要添加什么来添加事件?

时间:2011-03-16 02:43:15

标签: actionscript-3 events addeventlistener dispatchevent

我发送一个事件,当一个sql查询没有返回匹配项,这样我就可以继续添加到数据库..似乎ac​​tionscript要求我将监听器附加到某个东西,但我真的没有在我的代码中,似乎是逻辑候选的变量。

我只想监听要调用的isNewRecord事件,以便我可以运行insert查询;现在它正在调用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 个答案:

答案 0 :(得分:1)

您的代码有问题。你在一个函数中有一个函数。

此外,您的代码是扩展EventDispatcher类(或任何扩展它的类,如Sprite,MovieClip等?)确保它是。

试试这个:

public function addBG(BG:Number, datetime:String, batch:Boolean = false):void
{
        // note, you're adding this event listener EVERY TIME you call the 
        // addBG function, so make sure you remove it OR add it somewhere in the
        // init or complete functions

        addEventListener("isNewRecord", recordExists);
        checkRecord('Gb', datetime, matchRecord);    
}
public function recordExists():void
{/*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);
        }
}

答案 1 :(得分:0)

您不需要使用活动。您对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;
}

干杯