2011-05-03 8 views
1

나는 부모에게 다차원 배열을 자식에게 전달하려고합니다. 배열 구조라는 projectPositions는 (예를 들어, 데이터)은 다음과 같다 :flex 3 : 아무도 나를이 배열 -> arrayCollection 함수를 최적화하는 데 도움이 될 수 있습니까?

projectPositions[0][0] = 1; 
projectPositions[0][1] = 5; 
projectPositions[0][2] = '1AD'; 
projectPositions[0][3] = 'User name'; 

난 난의 dataProvider로 사용할 수 있도록이 상속 배열을하고있는 ArrayCollection으로 바꿀 필요가있다.

for (var i:int = 0; i < projectPositions.length; i++) 
{ 
tempObject = new Object; 
tempObject.startOffset = projectPositions[i][0]; 
tempObject.numDays = projectPositions[i][1]; 
tempObject.role = projectPositions[i][2]; 
tempObject.student = projectPositions[i][3]; 
positionsAC.addItemAt(tempObject, positionsAC.length); 
} 

그런 다음, 리피터 동안, 내가하는 dataProvider로 positionsAC을 사용하고있는 항목을 참조 :> ArrayCollection에 - 현재 내 init 함수는 (onCreationComplete을 실행하는)가 배열이 작업을 처리 할 수있는이 코드가 다음과 같은 방법으로 :

<mx:Repeater id="indPositions" dataProvider="{positionsAC}" startingIndex="0" count="{projectPositions.length}"> 
    <components:block id="thisBlock" offSet="{indPositions.currentItem.startOffset}" numDays="{indPositions.currentItem.numDays}" position="{indPositions.currentItem.role}" sName="{indPositions.currentItem.student}" /> 
</mx:Repeater> 

이 모든 것이 제대로 작동하고 원하는 효과를 반환하지만이 응용 프로그램의로드 시간은 약 10 초입니다. 99 %는로드 시간이 배열 -> arrayCollection for 루프에 의해 발생했는지 확신합니다. 페이지가로드 될 때까지 오래 기다릴 필요없이 원하는 효과를 얻는 더 쉬운 방법이 있습니까?

+0

해당 배열의 출처는 무엇입니까? 그것의 길이는 얼마입니까? – Constantiner

답변

0

addItemAt 크게 컬렉션을 늦출 수 컬렉션의 인덱싱을 일으키는

positionsAC.addItemAt(tempObject, positionsAC.length); 

positionsAC.addItem(tempObject); 

로 변경.

[편집] 루프 앞뒤에이 trace 문을 넣으면 출력을 가져 와서 다른 루프에서 하나를 빼면 루프가 실행 된 시간 (밀리 초)이 표시됩니다.

var date:Date = new Date(); 
trace(date.getTime()) 
+0

나는 질문을 게시하자마자 ... 나는 당신이 제안한 것으로 바꿨고,로드하는데도 오래 걸린다. ( – Brds

+0

projectPositions에 얼마나 많은 아이템이 있는가? –

+0

projectPositions를 데이터로 사용할 수도있다. 공급자 당신은 그걸 위해 아이템 렌더러를 사용자 정의해야합니다 –

1

목록 클래스 대신 리피터를 사용하고 있기 때문에 아이템을로드하는 데 문제가있을 수 있습니다.

리피터를 사용하면 메모리에 블록이 만들어져 화면에 그려집니다. 따라서 배열에 100 개의 항목이 있으면 100 개의 블록이 만들어집니다. 이로 인해 초기 제작과 전체 앱이 느려질 수 있습니다.

목록 기반 클래스는 렌더러 재활용이라는 기술에 중점을 둡니다. 이는 표시된 요소 만 만들어지고 화면에 렌더링됨을 의미합니다. 따라서 설정에 따라 어레이에있는 항목의 수와 관계없이 일반적으로 화면에 7-10 개의 '블록'인스턴스가 있습니다.

관련 문제