2012-08-14 111 views
0

我在使用itemrenderer的Flex 4.6項目中有一個<s:List>。我的應用程序偶爾會將更多項目推送到此<s:List>,並且itemrenderer按預期獲取並應用此更改。我的名單看起來是這樣的:Flex 4 Itemrenderer更新事件?

<s:List borderVisible="false" contentBackgroundAlpha="0" 
     dataProvider="{this.data.root.item}" id="reviews" 
     itemRenderer="renderers.pages.ReviewRenderer" minHeight="1" 
     top="10" width="100%"> 
    <s:layout> 
    <s:VerticalLayout gap="35" requestedMinRowCount="1" useVirtualLayout="false/> 
    </s:layout> 
</s:List> 

...我追加更多的數據到數據提供者的物體,像這樣:

this.data.root.item.addItem(this.form.reviewData); 

我想知道,如果有,我可以聽一個事件只要addItem()方法將更多數據推送到對象上以便<s:List>顯示。

我知道我可以使用FlexEvent.VALUE_COMMIT事件,但根據文檔,只要數據首次應用於列表,並且任何用戶與列表交互的項目都會更新其某個屬性(例如選擇一個屬性的列表項目)。

所以,只需要清楚,我正在尋找僅在addItem()將數據附加到數據提供者時纔會分派的事件。

注意:我正在使用<s:List>組件作爲web項目,而不是移動優化版本。

謝謝你的時間。

回答

2

如果dataProvider(在你的例子this.data.root.item)的列表是一個ArrayCollectionXMLListCollection,或ListCollectionView將派遣CollectionEvent.COLLECTION_CHANGE當過集合變化。

CollectionEvent有一個kind屬性,您需要檢查,因爲有各種更改(請參閱CollectionEventKind類)。特別是,您可能對CollectionEventKind.ADD感興趣。

另一種方法是重寫你的數據提供程序的addItem()方法,並派遣自己的「itemAdded」事件:

override public function addItem(item:Object):void 
{ 
    super.addItem(item); 
    dispatchEvent(new Event("itemAdded")); 
} 
+0

神奇!我想我是從錯誤的結局看這個。讓我申請這個,我會回來接受。 :d – 2012-08-14 16:46:47