1

我正在使用父母将多维数组传递给孩子。名为 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);
}

然后,在转发器期间,我使用 positionAC 作为数据提供者并以下列方式引用这些项目:

<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 循环引起的。有没有更简单的方法来达到预期的效果,而不必等待页面加载这么长时间?

4

2 回答 2

1

您加载项目的问题可能是因为您使用的是转发器而不是列表类。

使用中继器,将在内存中创建一个块,并在屏幕上绘制。因此,如果您的数组中有 100 个项目,那么将创建 100 个块。这可能会减慢初始创建和整个应用程序的速度。

基于列表的类专注于一种称为渲染器回收的技术;这意味着仅在屏幕上创建和呈现显示的元素。因此,根据设置,屏幕上通常会有 7-10 个“块”实例,无论阵列中有多少项目。

于 2011-05-03T18:26:46.647 回答
0

改变

positionsAC.addItemAt(tempObject, positionsAC.length);

positionsAC.addItem(tempObject);

addItemAt 导致集合的重新索引,这会大大减慢集合的速度。

[编辑] 将此跟踪语句放在循环之前和之后获取输出并从另一个中减去一个,这将显示循环运行了多少毫秒。

var date:Date = new Date( );
trace( date.getTime())
于 2011-05-03T18:02:14.413 回答