У меня есть объект, расширенный от arraycollection. Этот объект должен иметь доступ к исходному объекту arraycollections и управлять им. Когда это происходит, локальная отсортированная / отфильтрованная копия данных не синхронизируется с исходными данными. Чтобы выровнять все правильно, необходимо повторно применить сортировку / фильтр.
Чтобы сделать это в обычном режиме, вы должны вызвать refresh () для коллекции array, но при этом также будет транслироваться событие обновления. Я хочу обновить сортировку / фильтр без отправки события.
Заглянув в класс ArrayCollection, я увидел, что он расширен от ListCollectionView. Функция обновления
public function refresh():Boolean
{
return internalRefresh(true);
}
находится в ListCollectionView и вызывает эту функцию
private function internalRefresh(dispatch:Boolean):Boolean
{
if (sort || filterFunction != null)
{
try
{
populateLocalIndex();
}
catch(pending:ItemPendingError)
{
pending.addResponder(new ItemResponder(
function(data:Object, token:Object = null):void
{
internalRefresh(dispatch);
},
function(info:Object, token:Object = null):void
{
//no-op
}));
return false;
}
if (filterFunction != null)
{
var tmp:Array = [];
var len:int = localIndex.length;
for (var i:int = 0; i < len; i++)
{
var item:Object = localIndex[i];
if (filterFunction(item))
{
tmp.push(item);
}
}
localIndex = tmp;
}
if (sort)
{
sort.sort(localIndex);
dispatch = true;
}
}
else if (localIndex)
{
localIndex = null;
}
revision++;
pendingUpdates = null;
if (dispatch)
{
var refreshEvent:CollectionEvent =
new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
refreshEvent.kind = CollectionEventKind.REFRESH;
dispatchEvent(refreshEvent);
}
return true;
}
досадно, что эта функция является частной и поэтому недоступна для класса, расширяющего ListCollectionView. Кроме того, многое из того, что находится в функции internalRefresh, также является частным.
Кто-нибудь знает, как вызвать internalRefresh из класса, расширяющего ArrayCollection? Или способ остановить отправку события обновления при вызове обновления?