好的,下面是我必須做的一個簡化示例。Flex中的函數和sortCompareFunction和大型數據集
到目前爲止好,工程A1。 ID由朋友名稱替換,並且該列可排序。
現在,我必須將其應用於包含數千個ID和數千行的系統。
我嘗試過了,wooooooooooo,它是如此之慢,無法提供像這樣的客戶端...
會是什麼,在你看來,最好的方法來達到同樣的目標是什麼?
唯一的想法我是不是隻存儲在數據庫中的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>
的IF(..)語句,只是有一個簡單,工作示例。在真實的系統中,我向我的數據庫發送查詢,並將名稱存儲在對象中。然後,我的labelFunction將名稱和ID關聯起來。但我會看看dictionnay對象,並保持發佈。謝謝! – Jivago
您可以使用Dicionary來緩存結果。如果不存在於nameDictionary中,則請求DB,否則使用存儲值 – Exort