2009-08-06 5 views
0

RESTリクエストを使用してFlexアプリケーションを作成し、HTTPキャッシュを回避し、クライアント/サーバーの時刻を同期しようとしています。このためには、私のようなtimestampプロパティを作成しました:HTTPServiceでFlexプロパティを使用すると、Flexのプロパティが異常に動作する

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

(私はすでに特別なモジョを使用して設定したclientClockAdjustMsec

私も、このように私のクエリ文字列にタイムスタンプを含めるようにしよう:

<mx:HTTPService url="/Service?ts={timestamp}" ... 

しかし、アクセスログに表示される内容は変です。これは次のようなものです:

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変数の場合と同じように毎回プロパティを評価すると期待します。

は(実は、私は再度チェックし、それがバインド可能な変数に対して同じことをしない。しかし、すべてのクライアントとのフラッシュのいくつかのバージョンが「問題」を持っていますか?)

答えて

1

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

private function whereSendHappens():void 
{ 
    timestamp = new Date().getTime() + clientClockAdjustMsec; 
    myService.url = "/Service?ts=" + timestamp; 
    myService.send(); 
} 

[Bindable] 
private var timestamp:Number; 

private function whereSendHappens():void 
{ 
    timestamp = new Date().getTime() + clientClockAdjustMsec; 
    myService.send() 
} 

<mx:HTTPService url="/Service?ts={timestamp}" ... 

何らかの理由でそれが機能しなかった場合:あなたはmyService.sendを()を使用しているあなたのコード内で

どこかは、あなたのような何かをする必要があり任意のバインディングの問題...

+0

ジョエルが正しい。 'timestamp'の値が変更されたことをHTTPServiceに伝えることは決してないので、データバインディングを更新することは知られていません。 – Dan

+1

* TECHNICALLY *これはプロパティではなく関数の出力値に関連するデータバインディングではありません。 – cwallenpoole

+0

私はあなたの精巧さを反映するように答えを更新しました。それを指摘していただきありがとうございます。 –

1

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

[Bindable("updateTimestamp")] 
public function get timestamp() : Number { ... } 

public function whereSendHappens():void 
{ 
    dispatchEvent(new Event("updateTimestamp")); // will cause the binding to fire 
    myService.send(); 
} 
関連する問題