您好我有一個Air應用程序,可下載大約100000個對象的數據集並將這些對象放入ArrayCollection中。Adobe Air/Flex過濾大型數據集
我想將各種過濾器應用於整個應用程序中衆多屏幕中的數據集。 如果我製作集合的多個副本,我有點擔心可能的性能問題。但是,如果我不復制集合,則所有應用的過濾器都將反映在所有屏幕中,這不是我需要的行爲。
給這個大型數據集合提供多個視圖的最好方法是什麼? 有沒有人有這種情況下的任何經驗。 任何幫助非常感謝。
您好我有一個Air應用程序,可下載大約100000個對象的數據集並將這些對象放入ArrayCollection中。Adobe Air/Flex過濾大型數據集
我想將各種過濾器應用於整個應用程序中衆多屏幕中的數據集。 如果我製作集合的多個副本,我有點擔心可能的性能問題。但是,如果我不復制集合,則所有應用的過濾器都將反映在所有屏幕中,這不是我需要的行爲。
給這個大型數據集合提供多個視圖的最好方法是什麼? 有沒有人有這種情況下的任何經驗。 任何幫助非常感謝。
您可以使用充當原始ArrayCollection和存儲在其中的數據的代理的類。您可以在代理上設置過濾器功能,並讓代理將其大部分其他功能委託給引用的ArrayCollection。你可以通過繼承ListCollectionView來做到這一點。
您可以使用原始數據創建單個數組,但在同一個數組上也有不同的ArrayCollections。因此,您可以將任何過濾器應用於ArrayCollections的實例。
作爲例子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="init();">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var buffer:Array;
[Bindable]
private var listData1:ArrayCollection;
[Bindable]
private var listData2:ArrayCollection;
private function init():void
{
buffer = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
listData1 = new ArrayCollection();
listData1.source = buffer;
listData2 = new ArrayCollection();
listData2.source = buffer;
listData1.filterFunction = filter1
listData2.filterFunction = filter2;
listData1.refresh();
listData2.refresh();
}
private function filter1(item:Object):Boolean
{
var i:Number = Number(item);
if (i >= 5)
{
return true;
}
return false;
}
private function filter2(item:Object):Boolean
{
var i:Number = Number(item);
if (i <= 5)
{
return true;
}
return false;
}
]]>
</mx:Script>
<mx:HBox>
<mx:List id="list1"
dataProvider="{listData1}"/>
<mx:List id="list2"
dataProvider="{listData2}"/>
</mx:HBox>
</mx:Application>
我想有2種選擇:
不用擔心性能問題:即使你有多個集合,他們將都指向同一個數據對象通過引用。只需創建新的ArrayCollections並以數組形式傳入對象。然後,您可以將濾鏡應用於各個集合。
通過爲每個視圖應用一個過濾器,然後將結果複製到一個新的ArrayCollection中,熱切地處理這些過濾器。一旦過濾了一個集合,使用源filteredCollection.toArray()創建一個新集合。同樣適用於上述情況:集合將包含對象的引用,而不是值副本。
我有完全一樣的情況,並開發了這個工具:surflex。它允許選擇,過濾和加入收藏真快。