1

dataProviderが2つの異なるタイプのオブジェクト(FolderVOとFileVO)のArrayCollectionであるこのデータグリッドがあります。私には、FolderVOの場合はcontentSizeという属性が入力され、FileVOの場合はsize属性が入力されるサイズ列があります(違いは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]

お気づきかもしれませんが、エラーは私のコードではなく、flexフレームワーク自体で発生します。だから私は本当にここで立ち往生しています。助けていただければ幸いです。

4

1 に答える 1

4

わかりました、私はそれを自分で見つけました...

ある時点で Flex Framework が ArrayCollection に含まれるすべてのオブジェクトにsize属性があると想定し、カスタムの並べ替え関数を使用している場合でも、何かの値を取得しようとするため、明らかにエラーが発生します。

解決策は、ダミーのサイズ属性を FolderVO にデフォルト値 0 で追加することでした。

これが誰かに役立つことを願っています。

乾杯!

于 2009-12-28T21:53:37.363 に答える