[英]Why change in ArrayCollection's length doesn't invoke Setter on component using it as data source?
[英]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中刪除該項。
a = new ArrayCollection(b); or a= new ArrayCollection();// Default constructor ArrayCollection(source:Array=null); a.source = b; //updates data in Arraycollection
數據綁定意味着綁定控件與數據源(可以是任何東西,如函數,對象,其他控件,數組,XML,集合,列表等)
數據綁定是將一個對象中的數據綁定到另一個對象的過程。 它提供了一種在應用程序的不同層之間傳遞數據的便捷方式。 數據綁定需要源屬性,目標屬性和觸發事件,該事件指示何時將數據從源復制到目標。 當source屬性更改時,對象將調度觸發事件。
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.