簡體   English   中英

通過設置它的源或更改它的引用來重置ArrayCollection是否有任何區別

[英]Is there any difference of reset an ArrayCollection by set it's source or change it's reference

我現在有兩個ArrayCollection(a,b),並且a設置為可綁定。 我想用b重置一個。

我們項目中的舊代碼如下:

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優化提示:ArrayCollection.removeAll()與ArrayCollection.source = new Array()。 這是一個錯誤嗎? 它說當數據集很大時,removeAll()會導致性能問題。

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

另一個問題,我還閱讀了一個關於更改ArrayCollection源的主題。 它說如果直接使用a = b,“它將殺死正在偵聽ArrayCollection實例上的事件的所有數據綁定控件”。 我不明白這一點。 我嘗試了a = b,它運行正常(使用as dataprovider更新的視圖)。

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

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

ArrayCollection是一個圍繞Array的包裝類,底層Array可以使用source屬性進行訪問

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

  • 所以應該總是使用ArrayCollection的Source屬性,如果已經填充了Array我建議將b聲明為Array而不是ArrayCollection並初始化 as
 a = new ArrayCollection(b); or a= new ArrayCollection();// Default constructor ArrayCollection(source:Array=null); a.source = b; //updates data in Arraycollection 

數據綁定意味着綁定控件與數據源(可以是任何東西,如函數,對象,其他控件,數組,XML,集合,列表等)

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

  • 數據綁定可能是有害的應用的大數據,因為它會創建多個更改事件和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); } 

可以在綁定到函數,對象和數組上查看綁定的詳細信息

希望有助於

我也會嘗試:

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

當你聲明:

a = new ArrayCollection()

它丟失了指向“舊”ArrayCollection的指針,它將它綁定到您的應用程序。 因此,這就是為什么當你執行“new ArrayCollection”時,綁定不再起作用。 但是,在您的示例中,您沒有創建“新的ArrayCollection”...您只是用其他東西替換該ArrayCollection中的對象......所以綁定仍然有效。

如果您有數千個數據,您可能需要考慮實現某種分頁。 如果它只有幾百個,那么我認為你不必太擔心a.removeAll()的性能;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM