2012-08-14 87 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