添加到集合时,排序集合和排序是否仍然存在?

时间:2011-06-30 14:46:17

标签: flex actionscript-3 actionscript flex4

当我从服务层获得一个集合时,我创建一个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 ) );
        }

4 个答案:

答案 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属性设置为nullrefresh()

myArrayCollection.sort = mySort;
myArrayCollection.refresh();
myArrayCollection.sort = null;

现在,只要你在ArrayCollection上调用refresh(),sort就不再存在了。