1

この質問は役に立ちませんでした。

関数を配列にプッシュしています。配列はコールバックのリストであり、特定の関数を削除したい場合があります。

配列をループして特定の関数を削除できるようにしたい。このようなもの:

    public function clearCallback(callName:String = null, callback:Function = null) :void{
        if(callName == null){
            //remove all callbacks
            this.callbackFuncs = {};
        }
        else if(this.callbackFuncs.hasOwnProperty(callName)){
            if(callback == null){
                //remove all callbacks for this API call
                this.callbackFuncs[callName] = [];
            }
            else{
                //remove specific callback function
                for(var i:Number = 0, iLen:Number = (this.callbackFuncs[callName] as Array).length; i < iLen; i ++){
                    if(this.callbackFuncs[callName][i] == callback){
                        this.callbackFuncs[callName][i] = null;
                    }
                }
            }
        }
    }

//remove specific callback function私が問題を抱えているとコメントしたものですが、どうすれば2つの機能を比較できますか?

上記のコードでcallNameは、 は関数名ではなく、コールバックが登録されている API 呼び出しの名前です。

4

1 に答える 1

2

nullに設定しているコールバックを削除するのではなく、次のようにしてみてください。

public function clearCallback(callName:String = null, callback:Function = null) :void{
    if(callName == null){
        //remove all callbacks
        this.callbackFuncs = {};
    }
    else if(this.callbackFuncs.hasOwnProperty(callName)){
        if(callback == null){
            //remove all callbacks for this API call
            this.callbackFuncs[callName] = [];
        }
        else{
            //remove specific callback function
            for(var i:Number = (this.callbackFuncs[callName] as Array).length-1; i >=0; i --){
                if(this.callbackFuncs[callName][i] == callback){
                    this.callbackFuncs[callName].splice(i,1);
                }
            }
        }
    }
}

お役に立てば幸いです。

于 2012-09-27T15:42:12.833 に答える