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 получит CollectionChangeEvent
и повторно запустит его фильтр.Поскольку все Matts были отфильтрованы из объекта source
, justMatts
также будет пустым.Однако, если вы посмотрите в коде ListCollectionView
, они не будут обрабатывать CollectionEventKind.REFRESH
, который срабатывает, когда source
применяет новый фильтр.Я делаю что-то не так (использую неправильный класс и т. Д.) Или ничего не делает во Flex, поддерживаю изменения в фильтре source
.
Я могу заставить это работать так, как я ожидаю, вручную отправив CollectionEventKind.RESET
на source
, но я надеялся, что не придется ничего делать подклассом.