ListCollectionView 通常被宣传为菊花链相同数据的不同视图的好方法。您有一些源集合,然后使用 ListCollectionView + filterFunction 包装源数据并呈现该源集合的子集。当源集合更改(添加或删除)时,链接的 LCV 会自动更新。但是,如果源集合的 filterFunction发生更改,它似乎不会传播到链接的 LCV:
ArrayCollection source = new ArrayCollection(new Array({name: 'Matt'}, {name: 'John'}, {name: 'Zach'}));
ListCollectionView justMatts = new ListCollectionView(source);
justMatts.filterFunction(function(obj: Object):Boolean { obj.name == 'Matt' });
justMatts.refresh();
如果我向 中添加一个新的 Matt 对象source
,justMatts
将获取该更改并按预期重新运行其过滤器。
但是,如果我添加一个过滤器source
以排除 Matt 对象,justMatts
则不会对源过滤器进行该更改:
source.filterFunction(function(obj: Object):Boolean { obj.name != 'Matt' });
source.refresh();
在这一点上,我希望 justMatts 收到 aCollectionChangeEvent
并重新运行它的过滤器。由于所有的 Matts 都已从source
对象中过滤掉,因此justMatts
也将是空的。但是,如果您查看ListCollectionView
代码,它们不会处理应用新过滤器CollectionEventKind.REFRESH
时触发的内容。source
我在这里做错了什么(使用错误的类等)还是在 Flex 中不支持source
过滤的更改。
我可以通过手动调度CollectionEventKind.RESET
on来实现我期望的工作source
,但我希望不必对任何东西进行子类化。