0

シングルトンパターン内に、すべてのアプリケーション全体ですべてのデータアクセスオブジェクトクラスと共有されるNetConnectionオブジェクトがあるとします。さて、あなたは画面に行き、何かの間違いなどを検索したいので、5000のレコードをロードするように頼みました。しかし今、あなたは自分が間違った画面にいて、実際には別の「エンティティ」からの5000のレコードが必要であることに気づきました。別の画面に移動して別のデータを要求できるように、データがここに到着するまで2分近く待つ必要がないようにするにはどうすればよいですか?ESCボタンをキー発信者として使用してみましたNetConnection.close()イベントですが、実際には機能しません。空のイベントをディスパッチするだけで、呼び出しは引き続き返されます。サーバーに彼の仕事を続けないように頼むことはできないことは知っていますが、ESCなどを押した後、ActionScriptがその特定の呼び出しに煩わされないようにする方法を知りたいのですが、あなたの人生を続けてください。そして、サーバーがその呼び出しに応答するとき、バックグラウンドで、あなたがすでにそれをキャンセルすることに同意したので、私はそれを捨てるつもりです。

追伸:ESCボタンを聞いて、それを介して何らかのメソッドを呼び出す方法に疑いはありません。ユーザーがそのデータをもう受け取りたくないと判断したときに、何を呼び出すかを知りたいだけです。彼女は、アプリを閉じて再度開くことなく先に進みたいと考えています。

編集:

呼び出し後にResponderオブジェクトを破棄しようとしましたが、機能しませんでした。

        public function call(command:String, f:Function, fault:Function, ...parameters):void{
        var r:Responder = new Responder(f, fault);
        this._Responder = r;
        if(parameters.length == 0)
            GATEWAY.call(command, _Responder);
        else
            GATEWAY.call(command, _Responder, parameters);
    }

    public function close():void{           
        _Responder = new Responder(function(obj:Object):void{}, function(obj:Object):void{});
        //_Responder = null;
        trace("Canceled");
    }

ここで説明するコードを使用して、呼び出しを停止し、作成しNetConnection::callた「呼び出し関数」の呼び出しを開始しました。したがって、この関数はクラススコープ内にあるレスポンダーを構築するので、呼び出しが行われ、ESCボタンが「閉じる」関数を呼び出した後でもアクセスできます。nullに設定して、再構築してみました。うまくいきませんでした。NetConnectionが呼び出しを行った後は、レスポンダーを変更できないと思います。

4

1 に答える 1

0

NetConnection クラスは、AMF 呼び出しのキャンセルをサポートしていません。ただし、shaunhusain が言ったように、シングルトン クラスから呼び出されるメソッドのストレージ (配列、辞書など) を保持できます。呼び出しをキャンセルすると、その呼び出しのみの結果イベント リスナーを無効にする必要があります。

そのため、AmfCall からの結果を待っているモジュールを終了しても、シングルトン クラスからのコールバックはなく、次の画面に進むことができます。

public class Call
{
var responder:Responder;
var service:String;
var params:Array;

public function Call(service:String, params:Array)
{
   responder = new Responder(this.onResult, this.onFault);
   this.service = service;
   this.params = params;

}

public function removeListeners():void
{
   removeEventListener(CallEvent.RESULT, onResult);
}

public function onResult(result:Object):void
{
   this.result = result;
   dispatchEvent(new CallEvent(CallEvent.RESULT, callId, result));
}

}

Call クラスは、結果の受信時にイベントをディスパッチする役割を果たします。ただし、イベント リスナーがない場合、ディスパッチされたイベントはどのクラスでもリッスンされません。

このコード スニペットは、AmfPhpToolBox から取得されます。これらすべての問題に取り組むために、代わりにそのライブラリを使用することをお勧めします。

AMFPHPツールボックス

于 2012-05-28T07:50:23.547 に答える