ListCollectionView는 동일한 데이터의 여러 뷰를 데이지 체인 방식으로 연결하는 좋은 방법입니다. 일부 원본 컬렉션이 있고 ListCollectionView + filterFunction을 사용하여 원본 데이터를 래핑하고 해당 원본 컬렉션의 하위 집합을 제공합니다. 소스 모음이 변경되면 (추가 또는 제거 중) 체인 된 LCV가 자동으로 업데이트됩니다. 소스 컬렉션 변경에 대한 filterFunction의, 그것은 체인 된 LCV에 전파 할 수 나타나지 않는 경우, : 나는 source
에 새로운 매트 객체를 추가하는 경우데이지 체인으로 연결된 ListCollectionView는 소스 컬렉션의 필터에 대한 변경 사항을 반영하지 않습니다.
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();
, justMatts
는 그 변화를 선택하고 다시 실행합니다 그 예상대로 필터. 나는 매트 객체를 제외 source
에 필터를 추가하는 경우
그러나, justMatts
소스의 필터 그 변화를 선택하지 않습니다이 시점에서
source.filterFunction(function(obj: Object):Boolean { obj.name != 'Matt' });
source.refresh();
을, 나는 justMatts가 CollectionChangeEvent
을 받게 될 것입니다 필터를 재실행하십시오. 모든 매트가 source
오브젝트에서 필터링 되었기 때문에 justMatts
도 비어있게됩니다. 그러나 ListCollectionView
코드를 보면 source
에 새 필터가 적용될 때 발생하는 CollectionEventKind.REFRESH
을 처리하지 않습니다. 내가 틀린 일을하고 있는데 (틀린 클래스를 사용하는 등), 플렉스에서 source
필터의 변경을 지원하지 않습니다.
CollectionEventKind.RESET
을 source
에 수동으로 보내서 예상대로 작동하지만, 서브 클래스를 만들 필요가 없기를 바랬습니다.
ArrayCollection 서브 클래스 ListCollectionView. 배열 대신 다른 AC를 래핑하기 위해 AC를 얻을 수 있다면 예상대로 작동 할 수 있습니다. –
그런 식으로 AFAIK 작동하지 않습니다. 당신이 말한대로 AC에는 Array가 필요합니다. AC# toArray를 호출하여 필터링 된 AC의 * 스냅 샷 *을 얻을 수 있지만 스냅 샷 이후에는 업데이트가 수신되지 않습니다. –
새 AC에 List 속성을 설정할 수 있습니다 –