我在具有集合的filterFunction一个ArrayCollection调用getItemIndex当具有一些问题。

余像做myAC.removeItemAt(myAC.getItemIndex(myObject)),当尚未应用的滤波,工作正常。一旦应用过滤,getItemIndex似乎返回-1在任何情况下。

有没有人碰到这之前?什么的最佳方式删除项目形成经滤波的ArrayCollection?

非常感谢。

埃文

有帮助吗?

解决方案

到底什么是你的过滤器过滤掉?如果你已经过滤掉一切,getItemIndex应该返回-1。

您希望当已应用于您的过滤,以去除仍然可见的项目?如果你还是想删除会筛选出的项目,你可以暂时禁用过滤器:

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

// remove item

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

其他提示

我想你会发现有一个ArrayCollection内源对象。你们看到的是应用了排序或筛选基础数据的视图。你真的想从底层源对象删除。

我已经处理了添加和Flex中ArrayCollections删除项目的任何时间,我一直保持着原始的ArrayCollection的副本。任何添加或物品的去除发生在该原件。

一旦更改了原始制作,我移动这些期待的过滤列表。

从源删除它直接

arrayCollection.source.splice(i, 1)

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

结束了你的建议,Stiggler去。似乎做工精细,虽然它看起来应该有处理这种类型的东西不太hackish的方式。也许一个参数,你可以传递给removeItemAt,将让您访问未经过滤的集合。

无论如何,感谢你们两位您的答复。十分赞赏。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top