2012-11-05 103 views
0

我使用Label組件來顯示ArrayCollection的長度。當我將新項目添加到集合中時,如何獲取它?更新標籤文本字段

下面是標籤的文本字段:

text="{model.meetingInfo.documentList.length}" 

下面是加入新的項目到集合中的處理程序:

var attachmentProgressVO:AttachmentProgressVO = new AttachmentProgressVO(); 
       attachmentProgressVO.fileReference = file as File; 
       newAttachmentList.addItem(attachmentProgressVO); 
       checkIfUpdate(file as File, attachmentProgressVO); 
       meetingInfo.docsAndAttachmentsList.addItem(attachmentProgressVO); 

我嘗試添加這兩條線,但沒有奏效:

meetingInfo.docsAndAttachmentsList.itemUpdated(attachmentProgressVO); 
       meetingInfo.docsAndAttachmentsList.refresh(); 

我也想改變這個:

public var docsAndAttachmentsList:ArrayCollection = new ArrayCollection(); 

這樣:

private var _docsAndAttachmentsList:ArrayCollection = new ArrayCollection(); 

..with一個getter和setter,但沒有奏效。

我沒有使用正確的方法,是嗎?

+1

我不相信Array.length是一個可綁定屬性(這很好,因爲長度getter非常耗費資源,不幸的是)。如果這是真的,它不會自動更新。我想,你需要手動更新字段。 –

+0

@ Apocalyptic0n3 ArrayCollection上的長度爲Bindable。儘管是隻讀屬性。它被設置爲觸發與CollectionChange事件關聯的綁定。數組的長度不會是Bindable,因爲Bindable是Flex框架特定的實現,而Array不是Flex類。爲什麼你認爲長度吸氣劑是資源密集型的?我從來沒有測試過,但從未發現問題。 ArrayCollection.length只是Array.length的包裝;所以它應該非常快 - 除非Array.length是導致放緩的原因。 – JeffryHouser

+0

我還沒有做過任何測試,但是我已經在多個位置上看到它是一個「沉重的」吸氣,並且最好不要將它用作循環中的限制器,因爲它必須每次都運行循環運行。我不確定他們如何得到長度,但我懷疑它可能使用循環來計算數組中的每個項目。 –

回答

1

一般來說,綁定僅查看特定對象;您無法深入挖掘4個對象到特定屬性,並希望綁定到更新值。

更改documentList不會更改meetingInfo或Model,因此永遠不會觸發綁定。 itemUpdated()和refresh()應該更新顯示數據的基於列表的類;但不會影響顯示計數的標籤。

您需要偵聽collectionChange事件的集合並手動更新collectionChange處理程序中的標籤文本。