2010-05-14 6 views
1

ArrayCollection에 바인딩 된 mx : TileList가 있습니다. ArracyCollection을 수정하기 전에 "Loading ..."메시지를 표시하는 코드가 있고 그 뒤에 Loading 코드를 숨기는 코드가 있습니다.플렉스 : 바운드 TileList 렌더링 - 렌더링이 끝나는 시점은 언제입니까?

작은 데이터 세트의 경우 제대로 작동합니다. 그러나 TileList가 새로운 데이터의 렌더링을 끝내고 홀수 초 동안 빈 화면이 남겨지기 전에 flex가 내 로딩 메시지를 숨길 것이라는 것을 약 50 ~ 이상의 배열 크기로 알았습니다.

TileList가 다시 렌더링 된 후에 호출 할 수있는 이벤트가 있습니까? 이 예에서

loading_message.visible = true; 
for each (var x:Object in new_data) { 
    tile_list_data.append(x); // bound to my_tile_list component 
} 
my_tile_list.validateNow(); 
loading_message.visible = false; 

, 표시 사라지고, 다음 플렉스 응용 프로그램이 마지막으로 업데이트 된 TileList 구성을 공개하기 전에 지연됩니다 loading_message : 코드는 다음과 같이 보인다.

아이디어가 있으십니까? 감사!

답변

0

.visible = true를 실행하지 않고 각 루프에 대해 실행하고 완료 될 때까지 기다린 다음 .visible = false로 이동하지만 실제로 .visible을 실행합니다. 각각,.

다음 코드 줄이 계속되기 전에 코드가 끝나기 전에 코드의 나머지 부분을 다른 함수로 옮겨야합니다.이 코드는 custom event에 의해 호출됩니다.

이제 각 코드에 대해 코드가 추가되었는지 확인한 다음 맞춤 이벤트 디스패처를 호출해야합니다.

var n:Number = 0; 
for each (var x:Object in new_data) { 
    ++n; 
    tile_list_data.append(x); // bound to my_tile_list component 
    if (new_data.length <= n) { call the event } 
} 

그래서 지금 당신은 다음과 같은 코드의 나머지 부분을 포함하는 다른 함수를 호출합니다 일부 사용자 지정 이벤트 디스패처 각각에 대한 귀하가거야 .visable = 거짓., 확인하고 그 코드의 나머지 for each ends 후에 만 ​​실행됩니다.

나는 그것이 추한 것을 알고 있지만 그것이 작동 할 것이라고 생각할 수있는 유일한 방법입니다.