Критерии поиска должны содержать хотя бы одно значение поля сортировки - PullRequest
1 голос
/ 24 декабря 2009

У меня есть эта сетка данных, dataProvider которой представляет собой ArrayCollection двух разных типов объектов (FolderVO и FileVO). У меня есть столбец размера, который в случае FolderVO заполняется атрибутом с именем contentSize, а в случае FileVO он заполняется атрибутом размера (разница обрабатывается itemrenderer).

Это означает, что мне нужно реализовать функцию сортировки для столбца размера, вот она:

protected function sortSize(dataA:Object, dataB:Object):int{
        var order:int = 0;

        if(dataA is FolderVO && dataB is FolderVO){

            order = ObjectUtil.numericCompare(dataA.contentSize, dataB.contentSize);

        }else if(dataA is FileVO && dataB is FileVO){

            order = ObjectUtil.numericCompare(dataA.size, dataB.size);

        }else if(dataA is FolderVO && dataB is FileVO){

            order = 1;

        }else if(dataA is FileVO && dataB is FolderVO){

            order = -1;
        }

        return order;
    }

Функция работает довольно хорошо, но после оператора return я получаю эту ошибку:

Error: Find criteria must contain at least one sort field value.
at mx.collections::Sort/findItem()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\Sort.as:491]
at mx.collections::ListCollectionView/getItemIndex()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:513]
at ListCollectionViewCursor/collectionEventHandler()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:2154]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.collections::ListCollectionView/dispatchEvent()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:833]
at mx.collections::ListCollectionView/internalRefresh()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:1275]
at mx.collections::ListCollectionView/refresh()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\collections\ListCollectionView.as:402]
at mx.controls::DataGrid/sortByColumn()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\controls\DataGrid.as:3560]
at mx.controls::DataGrid/headerReleaseHandler()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\controls\DataGrid.as:4909]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:9298]
at mx.controls.dataGridClasses::DataGridHeader/mouseUpHandler()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\controls\dataGridClasses\DataGridHeader.as:1259]

Как вы могли заметить, ошибка происходит в самой среде фреймворка, а не в моем коде. Так что я действительно застрял здесь. Помощь будет принята с благодарностью.

1 Ответ

4 голосов
/ 29 декабря 2009

Хорошо, я нашел это сам ...

Очевидно, что ошибка вызвана тем, что в какой-то момент Flex Framework предполагает, что все объекты, содержащиеся в ArrayCollection, имеют атрибут size , поэтому он пытается получить его значение для чего-либо, даже если я использую Пользовательская функция сортировки.

Решением было добавить фиктивный атрибут size в мой FolderVO со значением по умолчанию 0.

Надеюсь, это кому-нибудь пригодится.

Cheerz!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...