FLEX ArrayCollection删除过滤的数据

来源:互联网 发布:linux帮助的命令 编辑:程序博客网 时间:2024/06/10 07:21

一、问题:

ArrayCollection添加过滤器后,部门数据不会被展现,当我删除未展现的数据时,调用removeItemAt()是无法删除的。

二、原因:

    public function removeItemAt(index:int):Object    {        if (index < 0 || index >= length)        {            var message:String = resourceManager.getString(                "collections", "outOfBounds", [ index ]);            throw new RangeError(message);        }        var listIndex:int = index;        if (localIndex)        {            var oldItem:Object = localIndex[index];            listIndex = list.getItemIndex(oldItem);        }        return list.removeItemAt(listIndex);    }
因为var oldItem:Object = localIndex[index];中localIndex是一个未被过滤的数据。

三、解决

ArrayCollection中有list的属性:

    public function get list():IList    {        return _list;    }
_list就是原始数据。

所以如果要在添加了过滤器的ArrayCollection上删除过滤的数据,需要list的帮助。实现代码如下:

public function findEmployeeInSource(id:int):OrgEmployee {var obj:OrgEmployee = null;var list:IList = employees.list;var len:int = list.length;for (var index:int = 0; index < len; index++) {obj = list.getItemAt(index) as OrgEmployee;if (obj.id == id) {return obj;}}return null;}public function deleteEmployee(id:int):void {var obj:OrgEmployee = findEmployeeInSource(id);if (obj != null) {var index:int = employees.list.getItemIndex(obj);employees.list.removeItemAt(index);}}

或者一个函数:

public function deleteEmployee(id:int):void {var obj:OrgEmployee = null;var list:IList = employees.list;var len:int = list.length;for (var index:int = 0; index < len; index++) {obj = list.getItemAt(index) as OrgEmployee;if (obj.id == id) {list.removeItemAt(index);return;}}}