3

設計上の決定またはアドビが HTTPService オブジェクトによって起動される ResultEvent の内容を変更したことによって。

次の例を見てください。

var httpService:HTTPService = myHTTPServices.getResults();
httpService.addEventListener(ResultEvent.RESULT,resultHandler);
httpService.send();

/**
 * Handels the login process
 */
function resultHandler(event:ResultEvent):void
{
    // get http service
    var httpService = (event.target as HTTPService);

    // do something
}

Flex 3.2 では魅力的に動作します。しかし、HTTPServiceが nullであるため、Flex 3.5 または Flex 4.0の event.targetでコンパイルしようとすると、 .

event.target がHTTPOperationのインスタンスになっていることがわかりました。langrefで HTTPOperationが見つからないので、これは興味深いことです。ただし、Flash Builder のデバッガーが意味するのはmx.rpc.http.Operationだと思います。

デバッガーは、event.targetにプライベート属性 httpService があることも示しています。これは、私がevent.targetで取得すると予想したインスタンスです。しかし、非公開なので、event.target.httpServiceは機能しません。

EventListener のみを削除したい場合は、event.targetEventDispatcherとしてキャストできます。しかし、HTTPServiceのメソッドを使用する必要があります。

では、どうすればResultEvent からHTTPServiceインスタンスを取得できますか?

どんな助けでも大歓迎です。ありがとう!

J.

4

2 に答える 2

2

これに入る場合は、ソースを調べると便利です。OS X では、rpcクラスは次のとおりです。/Applications/Adobe Flash Builder Beta 2/sdks/3.4.1/frameworks/projects/rpc/src

内部mx.rpc.http.HTTPServiceには、実際に という名前の内部クラスがありHTTPOperationます。それは拡張mx.rpc.http.AbstractOperationし、さらに拡張しますmx.rpc.AbstractOperation。内部には、必要なものを返すように見えるAbstractOperationgetter メソッドがあります。get service

は内部クラスであるため、事実上プライベートであるため、 (または のいずれか)HTTPServiceにキャストする必要があります。AbstractOperationmx.rpc.http.AbstractOperationmx.rpc.AbstractOperation

次のようなものです:

function resultHandler(event:ResultEvent):void
{
    // get the operation
    var operation:AbstractOperation = AbstractOperation(event.target);

    // get http service
    var httpService:HTTPService = HTTPService(operation.service);
}

編集:私はそれを取り戻します!nullHTTPOperation の構築時にスーパーを呼び出すときに、アドビがサービスを送信しているように見えます。したがって、HTTPService はプライベート変数にのみキャッシュされますhttpService。なぜ彼らがあなたからそれを隠しているのか私にはわかりませんが、あなた自身の参照を保持する必要があるようです.

于 2010-06-09T21:57:43.080 に答える