0

データベースへの追加を続行できるように、SQLクエリが一致を返さないときにイベントを送信しています。アクションスクリプトは、リスナーを何かにアタッチする必要があるようですが、実際には変数がないようですコード内のポイントの論理候補のように。

挿入クエリを実行できるように、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 に答える