Свойства Flex ведут себя странно при использовании в HTTPService - PullRequest
0 голосов
/ 06 августа 2009

Я пишу приложение Flex с использованием запросов REST и пытаюсь избежать кэширования HTTP, а также синхронизировать время клиент / сервер. Для этого я создал свойство timestamp как таковое:

// 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.

(На самом деле, я только что проверил еще раз, и он делает то же самое для переменных Bindable. Но не со всеми клиентами. У некоторых версий Flash есть «проблемы»?)

Ответы [ 2 ]

1 голос
/ 07 августа 2009

Другое, что вы можете сделать, это сделать функцию get привязанной к определенному событию.

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

public function whereSendHappens():void
{
    dispatchEvent(new Event("updateTimestamp")); // will cause the binding to fire
    myService.send();
}
1 голос
/ 07 августа 2009

так что это геттер только для чтения? Привязка не будет обновлять {timestamp} в вашем компоненте HTTPService, поскольку у него нет свойства для привязки. временная метка является выходом функции (как упоминает Кристофер ниже) и не является свойством Bindable. Вам нужно либо создать привязываемое свойство, либо явно указать URL с текущей отметкой времени, чтобы избежать связывания вообще.

Где-то в своем коде вы используете myService.send (), вам нужно сделать что-то вроде:

[Bindable]
private var timestamp:Number;

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

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

если по какой-то причине это не сработало:

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

, таким образом, избегая проблем с привязкой ...

...