FLEX ArrayCollection删除过滤的数据问题解决
FLEX ArrayCollection删除过滤的数据问题解决
发布时间:2016-12-29 来源:查字典编辑
摘要:一、问题:ArrayCollection添加过滤器后,部门数据不会被展现,当我删除未展现的数据时,调用removeItemAt()是无法删除...

一、问题:

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;

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Flex学习
热门Flex学习
编程开发子分类