当我从服务层获得一个集合时,我创建一个ArrayCollection并应用排序。当我稍后在集合中添加项目时,排序仍然存在?似乎是这样的。我以为我只是将它排序一次,而不是应用一种会粘在一起的那种???
以下是添加项目的方法:
private function onAddNewClick():void
{
var fileTemplate:FileTemplateDetailDTO = new FileTemplateDetailDTO();
fileTemplate.fileTemplateId = 0;
fileTemplate.fileTmpltDtlId = 0;
fileTemplate.createdBy = appModel.userName;
newFieldsDp.addItem( fileTemplate );
this.fieldsGridEmpty.rowCount = newFieldsDp.length + 1;
totalCount = newFieldsDp.length;
this.fieldsGridEmpty.scrollToIndex( totalCount );
}
以下是我现在正在尝试从服务中恢复数据的时间:
for each( var dto:FileTemplateCompositeDTO in coll ){
dto.templateHistory = createHistoryColl( dto.details );
var sortedArray:ArrayCollection = sortDetails( dto.details );
sortedArray.sort = null;
var freshArray:Array = sortedArray.toArray();
dto.details.source = freshArray;
model.fileTemplateComposites.addItem( FileTemplateCompositeDTO( dto ) );
}
答案 0 :(得分:3)
进行一次排序的最简单方法:
var array:Array = yourArrayCollection.toArray():
array.sortOn("SomePropertyAvailableInEachItem", Array.DESCENDING | Array.NUMERIC);
yourArrayCollection.refresh();
因为您没有对基础数组进行排序,而不是对集合进行排序。
答案 1 :(得分:2)
没有。每次更改时都应调用myCollection.refresh()
。但你可以听collectionChange
event并从那里调用刷新:
private function collectionChangeHandler(event:CollectionEvent):void
{
if (event.kind == CollectionEventKind.ADD || event.kind == CollectionEventKind.REMOVE ||
event.kind == CollectionEventKind.REPLACE || event.kind == CollectionEventKind.MOVE || event.kind == CollectionEventKind.UPDATE)
{
ArrayCollection(event.currentTarget).refresh();
}
}
答案 2 :(得分:2)
ArrayCollection
的类型仍将与之相关联。您可以尝试在初始排序和刷新后将sort
属性设置为null,但我不能100%确定后续refresh()
将保持元素顺序(尽管它应该)。
另一种方法:在对集合应用初始排序后,可以调用其toArray()
方法获取(排序)数组,然后创建一个新的ArrayCollection
,将该数组作为其来源传递构造函数。请注意,ArrayCollection
实际上只是数组的包装器,因此toArray()
和现有数组的新ArrayCollection
的构造不应该是繁重的操作。
答案 3 :(得分:1)
Sort
上的ArrayCollection
是一个对象本身。将Sort
对象分配给ArrayCollection
上的排序属性时,它将保持分配状态,直到您手动将其删除为止。要删除它,只需在致电sort
后将ArrayCollection
属性设置为null
至refresh()
。
myArrayCollection.sort = mySort;
myArrayCollection.refresh();
myArrayCollection.sort = null;
现在,只要你在ArrayCollection上调用refresh(),sort
就不再存在了。