0


0

HTTPServiceでFlexプロパティを使用すると、奇妙な動作をする

私はRESTリクエストを使用してFlexアプリを書いていて、HTTPキャッシュを避け、クライアント/サーバー時間を同期しようとしています。 このために、 `+ timestamp +`プロパティを作成しました:

// returns a timestamp corrected for server time
private function get timestamp() : Number
{
    return new Date().getTime() + clientClockAdjustMsec;
}

( `+ clientClockAdjustMsec +`は、特別なmojoを使用して既に設定しています)

私はこのように私のクエリ文字列にタイムスタンプを含めることも試みます。


しかし、アクセスログで私が見るのは変です。 それはこのようなものです:

1.2.3.4 - - [06/Aug/2009:17:19:47 +0000] "GET /Service?ts=1249579062937 HTTP/1.1" 200 478
1.2.3.4 - - [06/Aug/2009:17:20:13 +0000] "GET /Service?ts=1249579062937 HTTP/1.1" 200 500
1.2.3.4 - - [06/Aug/2009:17:20:14 +0000] "GET /Service?ts=1249579062937 HTTP/1.1" 200 435

タイムスタンプがすべて同じであることを確認しますか? とても奇妙。 Bindable変数の場合と同様に、毎回プロパティを評価することを期待します。

(実際には、もう一度確認しましたが、バインド可能変数についても同じことが行われます。 しかし、すべての顧客にそうではありません。 Flashの一部のバージョンには「問題」がありますか?)

2 Answer


1


だからこれは読み取り専用ゲッターですか? バインドするプロパティがないため、バインドはHTTPServiceコンポーネントの\ {timestamp}を更新しません。 タイムスタンプは(Christopherが後述するように)関数の出力であり、Bindableプロパティではありません。 バインド可能なプロパティを作成するか、URLを現在のタイムスタンプで明示的に設定して、バインドを完全に回避する必要があります。

myService.send()を使用しているコードのどこかに、以下のようなことをする必要があります。

[Bindable]
プライベート変数のタイムスタンプ:数値。

プライベート関数whereSendHappens():void {timestamp = new Date()。getTime()clientClockAdjustMsec; myService.send()}

何らかの理由でそれがうまくいかなかった場合:

プライベート関数whereSendHappens():void {timestamp = new Date()。getTime()clientClockAdjustMsec; myService.url = "/ Service?ts ="タイムスタンプ。 myService.send(); }

このように拘束力のある問題を回避する…​


1


他にできることは、get関数を特定のイベントにバインド可能にすることです。

[Bindable("updateTimestamp")]
パブリック関数get timestamp():Number {... }

public function whereSendHappens():void {dispatchEvent(new Event( "updateTimestamp")); //バインディングはmyService.send()を起動します。 }