2012-11-14 57 views
0

我現在有兩個ArrayCollection(a,b)和a是可綁定的。我想用b重置一個。是否有任何區別重置一個ArrayCollection通過設置它的來源或改變它的參考

舊的代碼在我們的項目是這樣的:

a = new ArrayCollection(); 
for (var i:int = 0; i < b.length; i++) { 
    a.addItem(b.getItemAt(i)); 
} 

然後,我認爲這可能會導致潛在的內存泄漏。所以,我把它改爲:

a.removeAll(); 
for (var i:int = 0; i < b.length; i++) { 
    a.addItem(b.getItemAt(i)); 
} 

然後我讀一個話題:Flex optimization tip: ArrayCollection.removeAll() vs. ArrayCollection.source = new Array(). Is this a bug ? 它說的removeAll()會導致性能問題,當數據集大。

那麼這是否意味着有一個騙局?如果數據集很小,我應該使用removeAll,如果數據集很大,我不應該使用removeAll()?

另一個問題,我也讀了一個關於Changing the source of an ArrayCollection的話題。 它說,如果直接使用a = b,「它將終止正在監聽ArrayCollection實例上的事件的所有數據綁定控件」。我不明白這一點。我嘗試了a = b,並且它工作正常(使用as作爲dataprovider更新的視圖)。

使用a = b和a.source = b.source有什麼區別?

我是新來的Flex。提前致謝。

+0

我不確定「我想用b重置」是什麼意思。從代碼中你想將所有元素從b複製到一個? – JeffryHouser

回答

1

ArrayCollection是圍繞Array一個包裝類,以及潛在的陣列可使用源屬性是訪問

ArrayCollection類是一個包裝類暴露數組作爲 可以使用的訪問和操作的集合方法 和ICollectionView或IList接口的屬性。在ArrayCollection實例上操作 修改數據源;例如,如果 對ArrayCollection使用removeItemAt()方法,則從基礎數組中刪除 項。

  • 所以每個人都應該使用ArrayCollection的來源屬性,如果有填充陣列 我建議申報b作爲數組沒有的ArrayCollection和初始化一個
a = new ArrayCollection(b); or 

a= new ArrayCollection();// Default constructor ArrayCollection(source:Array=null); 
a.source = b; //updates data in Arraycollection 

Data Binding意味着數據綁定控件RCE(也能像函數,對象,其他控制,陣列,XML,收集,列表等任何東西)

數據綁定是在一個對象綁數據到另一個 對象的過程。它提供了一種在應用程序的不同層之間傳遞數據的便捷方式。數據綁定需要源 屬性,目標屬性和 指示何時將數據從源複製到目標的觸發事件。 對象在源屬性 更改時調度觸發事件。

  • 數據綁定可能是有害的應用的大數據,因爲它會創建多個更改事件和getter和setter方法上的改變執行,這需要額外的等待處理所以這將是很好的做法的較短範圍並直接向源提供的數據作爲
private function handler_B_DataChange(event:Event) 
{ 
var a:Arraycollection = new ArrayCollection(b); 
controlA.dataProvider = a; 
//or just 
controlB.dataProvider = new ArrayCollection(b); 
} 

結合可以是視圖的細節對幫助

1

Binding to functions, Objects, and Arrays

的希望我也想嘗試:

a.removeAll(); 
a.addAll(b.list); 

當你聲明:

a = new ArrayCollection() 

失去指針,在那裏綁定 「老字號」 的ArrayCollection到您的應用程序。因此,這就是爲什麼當你做「新ArrayCollection」的綁定不再工作。然而,在你的例子中,你並沒有創建一個「新的ArrayCollection」......你只是用別的東西來替換該ArrayCollection中的對象...所以綁定仍然有效。

如果您的數據是成千上萬的,您可能需要考慮實施某種分頁。如果只有幾百個,那麼我認爲你不必太擔心a.removeAll()的性能。

相關問題