0

当 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);
        }
    }
4

2 回答 2

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);
        }
}
于 2011-03-16T02:54:41.273 回答
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;
}

干杯

于 2011-03-16T09:35:06.450 回答