Есть ли какой-нибудь способ вызвать 'updatedisplaylist' немедленно, а не позже? - PullRequest
0 голосов
/ 14 июля 2010

В жизненном цикле компонента flex, после того как мы внесем некоторые изменения в свойство компонентов, методы аннулирования планируют вызов таких методов, как commitProperties, updateDisplayList и т. Д., На более позднее время. Мне нужно позвонить на updateDisplayList мгновенно. Есть ли прямой способ сделать это. В настоящее время обе метки изменяются одновременно после завершения цикла. Вместо этого мне нужно, чтобы он работал следующим образом: сначала визуализируйте обновленную метку myButton1, затем войдите в цикл и затем обновите метку myButton2. Я знаю, это проблема эластичных гоночных трасс, но разве нет способа достичь этого?

myButton1.label = 'New Label1' ;
// Some logic to forcibly make the screen reflect it

for (var i:int = 0; i < 500 ; i ++){
//a dummy loop

}

myButton2.label = 'New Label2' ;

Ответы [ 4 ]

2 голосов
/ 14 июля 2010

Использовать validateNow () .Но я бы использовал это экономно.использование invalidateDisplayList () заставит updateDisplayList () запускаться при следующем событии визуализации.

Событие рендеринга происходит в каждом кадре.24 кадра по умолчанию происходят каждую секунду для Flex.Вы уверены, что нужно изменить эти значения быстрее?

2 голосов
/ 14 июля 2010

Вы можете использовать myButton1.validateNow(), но его использование не рекомендуется, так как вы можете в конечном итоге иметь один и тот же компонент, обновляющий себя несколько раз на одном и том же кадре.

1 голос
/ 15 июля 2010

Я бы установил метку для myButton1, затем поместил оставшийся код в отдельный метод и вызвал бы этот метод с помощью callLater:

private function foo():void {
    myButton1.label = 'New Label1';
    this.callLater(bar);
}

private function bar():void {
    for (var i:int = 0; i < 500 ; i ++){ //a dummy loop
    }
    myButton2.label = 'New Label2';
}

Таким образом myButton1 обновится, чтобы показать новую метку, прежде чем перейти в вашцикл, так как callLater не вызывает bar до тех пор, пока не будет очищена очередь событий, что дает myButton1 возможность обновляться.

0 голосов
/ 15 июля 2010

invalidateDisplayList () или valdiateNow () сделают это за вас, однако чрезмерное использование их приведет к утечке памяти.

...