OK、以下は私が行う必要がある簡単な例です。labelFunctionとsortCompareFunctionとFlexの大きなデータセット
これまでのところとてもうまくいっています。 IDはフレンド名で置き換えられ、列はソート可能です。
ここでは、これを数千のIDと数千の行を含むシステムに適用する必要があります。
私がどうなるか...クライアントにこのような何かを提供することは不可能、それはとても遅いです、
をそれとwoooooooooooを試してみました、あなたの意見では、同じ目標を達成するための最善のアプローチ?
私が持っていただけのアイデアではなく、あまりにも文字列として名を格納するために、DB内の唯一のIDを格納するのである...私はただの事、それは私が保管する必要はありません情報です...
誰もがアイデアを持っていますか? fId.labelFunction(obj1、fId)を各行に呼び出す代わりに、レンダリングされた文字列を並べ替える別の方法はありますか?
ありがとうございました!
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
[Bindable]
private var _friendList:ArrayCollection = new ArrayCollection([
{friend_id : 1},
{friend_id : 3},
{friend_id : 2},
{friend_id : 2},
{friend_id : 1},
{friend_id : 2},
{friend_id : 1},
{friend_id : 3}
]);
private function friendNameFromID(item:Object, column:DataGridColumn):String
{
var id:int = item[column.dataField];
if (id == 1)
return "Thomas";
if (id == 2)
return "Anthony";
if (id == 3)
return "George"
return "";
}
private function sortFromFriendName(obj1:Object, obj2:Object):int
{
var value1:String = fId.labelFunction(obj1, fId);
var value2:String = fId.labelFunction(obj2, fId);
if (value1 == value2)
return 0;
else if (value1 > value2)
return 1;
else
return -1;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<mx:DataGrid id="myDataGrid" dataProvider="{_friendList}" width="90%" height="90%" horizontalCenter="0" verticalCenter="0">
<mx:columns>
<mx:DataGridColumn dataField="friend_id"/>
<mx:DataGridColumn id="fId" dataField="friend_id" labelFunction="friendNameFromID" sortCompareFunction="sortFromFriendName"/>
</mx:columns>
</mx:DataGrid>
場合(..)ステートメントは、単に簡略化、作業例を持っていることです。実際のシステムでは、自分のDBにクエリを送り、その名前をObjectに格納します。次に、私のlabelFunctionは名前とIDを関連付けます。しかし、私はdictionnayオブジェクトを見て、あなたの投稿を保ちます。ありがとう! – Jivago
Dicionaryを使用して結果をキャッシュできます。 nameDictionaryに存在しない場合はDBを要求し、そうでない場合は格納された値を使用する – Exort