Apache flex 从筛选的ArrayCollection中删除项

Apache flex 从筛选的ArrayCollection中删除项,apache-flex,filterfunction,Apache Flex,Filterfunction,在使用filterFunction集对ArrayCollection调用getItemIndex时,我遇到了一些问题 我执行类似于myAC.removitemat(myAC.getItemIndex(myObject))的操作,在未应用筛选时,该操作可以正常工作。一旦应用了筛选,getItemIndex似乎在所有情况下都返回-1 以前有人见过这个吗?从过滤的ArrayCollection中删除项的最佳方法是什么 非常感谢 Evan每当我在Flex中处理从ArrayCollections中添加和删

在使用filterFunction集对ArrayCollection调用getItemIndex时,我遇到了一些问题

我执行类似于
myAC.removitemat(myAC.getItemIndex(myObject))
的操作,在未应用筛选时,该操作可以正常工作。一旦应用了筛选,getItemIndex似乎在所有情况下都返回-1

以前有人见过这个吗?从过滤的ArrayCollection中删除项的最佳方法是什么

非常感谢


Evan

每当我在Flex中处理从ArrayCollections中添加和删除项目时,我总是保留原始ArrayCollection的副本。任何项目的添加或删除都会发生在原始副本上


一旦对原始内容进行了更改,我会将这些内容向前移动到筛选列表。

您的筛选内容到底是什么?如果您已经过滤掉了所有内容,getItemIndex应该返回-1

是否希望删除应用筛选器后仍可见的项目?如果仍要删除已筛选出的项目,可以临时禁用筛选器:

var filter:Function = ac.filterFunction;
ac.fiterFunction = null;
ac.refresh();

// remove item

ac.filterFunction = filter;
ac.refresh();

是的,所以我确实发现我在试图删除它之前,正在将对象的属性更改为一个可以将其过滤掉的属性。在这种情况下,我当然会得到-1。我的错误

最后还是同意了你的建议,斯蒂格尔。看起来效果不错,不过似乎应该有一种不那么老练的方式来处理这类事情。也许您可以将一个参数传递给removeItemAt,以便访问未筛选的集合


无论如何,谢谢你们两位的回复。非常感谢。

我想您会发现ArrayCollection中有一个源对象。您看到的是应用了排序或过滤器的底层数据视图。确实要从基础源对象中删除

直接从源代码中删除它

arrayCollection.source.splice(i, 1)