我正在使用父级将多维数组传递给子级。名为projectPositions的数组结构如下(带示例数据):
projectPositions[0][0] = 1;
projectPositions[0][1] = 5;
projectPositions[0][2] = '1AD';
projectPositions[0][3] = 'User name';
我需要使用这个继承的数组并将其转换为arrayCollection,以便我可以将它用作dataProvider。目前,我的init函数(运行onCreationComplete)中包含此代码来处理数组的任务 - > 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);
}
然后,在转发器中,我使用positionsAC作为数据提供者并以下列方式引用项目:
<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%确定加载时间是由数组引起的 - &gt; arrayCollection for循环。是否有更简单的方法来实现所需的效果,而无需等待这么长时间来加载页面?
答案 0 :(得分:1)
您加载项目的问题可能是因为您使用的是转发器而不是列表类。
使用转发器,将在内存中创建一个块,并在屏幕上绘制。因此,如果阵列中有100个项目,则将创建100个块。这可能会减慢初始创建和整个应用程序。
基于列表的课程侧重于一种称为渲染器回收的技术;这意味着只在屏幕上创建和渲染显示的元素。因此,根据设置,您通常会在屏幕上显示7-10个“块”实例,无论您在阵列中有多少项目。
答案 1 :(得分:0)
变化
positionsAC.addItemAt(tempObject, positionsAC.length);
到
positionsAC.addItem(tempObject);
addItemAt导致集合的重新索引,这可能会大大减慢集合。
[编辑] 在循环之前和之后放置此跟踪语句 获取输出并从另一个中减去一个,这将显示循环运行了多少毫秒。
var date:Date = new Date( );
trace( date.getTime())