0

我的<s:List>Flex 4.6 项目中有一个使用 itemrenderer 的项目。我的应用程序偶尔会在 this 上推送更多项目<s:List>,并且 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 项目的组件,而不是移动优化版本。

感谢您的时间。

4

1 回答 1

2

如果列表中的dataProvider(this.data.root.item在您的示例中) 是ArrayCollection, XMLListCollection,或者它会在集合更改时ListCollectionView分派。CollectionEvent.COLLECTION_CHANGE

CollectionEvent有一个kind您需要检查的属性,因为有各种更改(请参阅CollectionEventKind类)。特别是,您可能对CollectionEventKind.ADD.

另一种方法是覆盖addItem()dataProvider 的方法并调度您自己的“itemAdded”事件:

override public function addItem(item:Object):void
{
    super.addItem(item);
    dispatchEvent(new Event("itemAdded"));
}
于 2012-08-14T16:43:23.920 回答