ArrayCollection反转我的对象的顺序

时间:2009-07-04 23:47:48

标签: flex actionscript-3 arraycollection

我会先告诉你这个功能。

private var areaCollection:ArrayCollection;

private function generateAreaCollection():void
{
    areaCollection = new ArrayCollection();             
    areaCollection.addItem({Areal: "Totalareal:", Verdi: int(totalArea * 100) / 100 + " kvm"});
    areaCollection.addItem({Areal: "Hovedtakets areal:", Verdi: int(result.area* 100) / 100 + " kvm"});

    //Lots of other stuff omitted (just more addItems).
}

如您所见,我将项目放入ArrayCollection的顺序是Areal,然后是Verdi(区域,值)

当我稍后循环收集时,订单会发生变化。现在是Verdi然后是Areal(价值,面积)。

有没有人知道可能出现什么问题?

当我将它传递给PHP脚本以便稍后在html中制作表格时,它确实会破坏一些东西。 (我有几个不同的动态DataGrids,大小和“值”不同,所以我不能直接指向我的PHP脚本中的f.ex“Areal”)

顺便说一下,有没有人知道如何删除那个讨厌的mx_internal_uid

1 个答案:

答案 0 :(得分:4)

AS3中的原始对象(对象类或{}定义的东西)没有排序。也就是说,订单是不可预测的。我认为你在这里混淆了两个想法。 Areal和Verdi字符串是对象图中的键。数组集合是由两个这样的对象组成的列表。因此,应用于数组集合的任何排序都将对这些对象进行排序,但不会对对象进行排序。

所以你需要引用areaCollection.source[0].Areal来获得“Totalareal”。并areaCollection.source[1].Verdi获取int(result.area* 100) / 100 + " kvm"

如果你执行for(var s:String in areaCollection.source[0]) { },你将迭代两次,其中“s”的值为“Areal”和“Verdi”,反之亦然(例如,顺序无法保证)。

有意义吗?如果您需要订购,可以将对象改为数组["Totalareal", (int(totalArea * 100) / 100 + " kvm")],然后使用[1]访问“Verdi”。

P.S。不确定如何删除mx_internal_id。