我在使用filterFunction设置的ArrayCollection上调用getItemIndex时遇到了一些问题。
我执行myAC.removeItemAt(myAC.getItemIndex(myObject))
之类的操作,在未应用过滤时效果很好。一旦应用了过滤,getItemIndex似乎在每种情况下都返回-1。
有没有人遇到过这个?从过滤的ArrayCollection中删除项目的最佳方法是什么?
非常感谢。
埃文
答案 0 :(得分:4)
您的过滤器究竟是什么过滤掉的?如果你已经过滤掉了所有东西,getItemIndex应该返回-1。
您是否希望删除在应用过滤器后仍然可见的项目?如果您仍想删除已过滤的项目,则可以暂时禁用过滤器:
var filter:Function = ac.filterFunction;
ac.fiterFunction = null;
ac.refresh();
// remove item
ac.filterFunction = filter;
ac.refresh();
答案 1 :(得分:4)
我想你会发现ArrayCollection中有一个源对象。您所看到的是应用了排序或过滤器的基础数据视图。您确实要从基础源对象中删除。
答案 2 :(得分:0)
每当我处理在Flex中添加和删除ArrayCollections中的项目时,我总是保留原始ArrayCollection的副本。任何添加或删除项目都会发生在原始副本上。
对原始内容进行了更改后,我将其移至过滤后的列表中。
答案 3 :(得分:0)
是的,所以我确实发现我正在尝试删除它之前将对象的属性更改为将其过滤掉的属性。当然,在这种情况下我会得到-1。我的错误。
结束你的建议,斯蒂格勒。似乎工作正常,虽然似乎应该有一种不那么强硬的方式来处理这类事情。也许您可以传递给removeItemAt的参数,以便您访问未过滤的集合。
无论如何,感谢你们两位的回复。非常感谢。
答案 4 :(得分:0)
直接从源中删除</ p>
arrayCollection.source.splice(i, 1)