mx.controls.listClassesIDropInListItemRenderer “嵌入式”项呈示器的接口。 “嵌入式”项呈示器的接口。多数 IListItemRenderers 都不是“嵌入式”项呈示器。它们将使用数据提供程序项目的特定字段。例如,它们可能会将项目的“lastName”属性分配给标签的 text 属性。使用数据绑定,可以很容易地进行写入操作,但是这会产生负面效果,即无法再在 DataGrid 的另一列或带有不同字段的另一个 List 中使用该呈示器。IDropInListItemRenderer 允许重复使用呈示器。列表类将向呈示器传递更多的信息,以便它能够确定在运行时使用哪一字段。

希望用作嵌入式项呈示器或嵌入式项目编辑器的组件必须实现 IDropInListItemRenderer 接口。许多 Flex 组件可实现此接口,因此可在任一列或列表中将其用作嵌入式项呈示器和嵌入式项目编辑器。

嵌入式项呈示器或嵌入式项目编辑器也必须实现 IDataRenderer 接口以定义 data 属性。

使用组件作为嵌入式项呈示器或嵌入式项目编辑器时,Flex 将使用 list 控件中的相应数据初始化该组件的 listData 属性。然后,组件可使用 listData 属性初始化嵌入式项呈示器或嵌入式项目编辑器的 data 属性。

listData 属性的类型为 BaseListData,其中 BaseListData 类包含四个子类:DataGridListData、ListData、TreeListData 和 MenuListData。listData 属性值的实际数据类型取决于使用嵌入式项呈示器或嵌入式项目编辑器的控件。对于 DataGrid 控件,值的类型为 DataGridListData;对于 List 控件,值的类型为 ListData;对于 Tree 控件,值的类型为 TreeListData;对于 Menu 控件,值的类型为 MenuListData。

下例显示了 setter 方法,该方法适用于 NumericStepper 控件(可根据 listData 属性的值初始化 NumericStepper 的 value 属性)的 data 属性:

    public function set data(value:Object):void
    {
      _data = value;
    
      this.value = _listData ? parseFloat(_listData.label) : Number(_data);
    
      dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
    }
  

在上例中,NumericStepper 控件在设置 NumericStepper 的 value 属性时将忽略 data 属性,并改为使用 listData 属性。

若要实现 IDropInListItemRenderer 接口,需定义 setter 和 getter 方法来实现 listData 属性。通常,setter 方法为内部变量写入 listData 属性的值。列表类始终分配此属性,然后设置 data 属性中的数据提供程序项目。

请注意,listData 属性的 setter 方法不会分派事件。这是因为列表类始终先设置 listData,然后设置 data 属性。设置 data 属性也会分派 dataChange 事件。您从不需要对 listData 进行单独设置,因此它不需要分派自己的事件。

如果 data setter 方法执行了一些需要控件进行自行更新的操作,则它可能会调用 invalidateProperties() 方法。然后,组件开发人员应写入 commitProperties() 方法以确定 listData 已修改并采取相应措施。

getter 方法返回内部变量的当前值,如下例所示:

    // Internal variable for the property value.
    private var _listData:BaseListData;
    
    // Make the listData property bindable.
    [Bindable("dataChange")]
    
    // Define the getter method.
    public function get listData():BaseListData
    {
      return _listData;
    }
    
    // Define the setter method,
    public function set listData(value:BaseListData):void
    {
      _listData = value;
    }
  
mx.controls.listClasses.BaseListDatamx.core.IDataRendererlistData 使用 setter 和 getter 方法实现 listData 属性。mx.controls.listClasses:BaseListData 使用 setter 和 getter 方法实现 listData 属性。
BaseListData BaseListData 类定义 listData 属性的数据类型,此属性由嵌入式项呈示器或嵌入式项目编辑器实现。flash.events:EventDispatcher BaseListData 类定义 listData 属性的数据类型,此属性由嵌入式项呈示器或嵌入式项目编辑器实现。所有嵌入式项呈示器和嵌入式项目编辑器必须实现 IDropInListItemRenderer 接口,此接口定义了 listData 属性。

listData 属性为 BaseListData 类型,其中 BaseListData 类包含三个子类:DataGridListData、ListData 和 TreeListData。listData 属性值的实际数据类型取决于使用嵌入式项呈示器或嵌入式项目编辑器的控件。对于 DataGrid 控件,此值为 DataGridListData 类型;对于 List 控件,此值为 ListData 类型;对于 Tree 控件,此值为 TreeListData 类型。

用作嵌入式项呈示器或嵌入式项目编辑器时,Flex 会将 listData 属性设置为 BaseListData-derived 类,其中包含与数据提供程序(包含项目数据)中的项目相关的计算信息。

尽管此类的属性是可写的,但应将其视为只读。这些属性由 List 类进行初始化,并由项呈示器或项目编辑器读取。更改这些值可能导致意外结果。

这些属性被标记为可绑定,但是这些属性不会实际执行任何 change 检测或发送 change 事件。通过为 listData 属性设置新值,这些属性会作为一个整体发生改变。用于修改 listData 属性的 change 事件将更新所有绑定。

mx.controls.listClasses.IDropInListItemRendererBaseListData 构造函数。label项目数据的文本表示形式。 uid唯一标识符。 ownermx.core:IUIComponent对 List 控件的引用。 rowIndex0行在控件中当前可见行中的索引。 columnIndex0该列在控件当前可见列中的索引。 构造函数。 columnIndex 基于 List 控件的列的索引与该控件的当前可见列相关,其中第一列的索引为 1。 基于 List 控件的列的索引与该控件的当前可见列相关,其中第一列的索引为 1。 label 项目数据的文本表示形式,基于 List 类的 itemToLabel() 方法。 项目数据的文本表示形式,基于 List 类的 itemToLabel() 方法。 owner 对拥有此项目的列表对象的引用。mx.core:IUIComponent 对拥有此项目的列表对象的引用。这应该是 ListBase-derived 类。此属性为 IUIComponent 类型。因此,嵌入式组件(如标签和 TextInput)就无需依赖 List 及其所有依赖项。 rowIndex DataGrid、List 或 Tree 控件的行的索引与该控件的当前可见行相关,其中第一行的索引为 1。 DataGrid、List 或 Tree 控件的行的索引与该控件的当前可见行相关,其中第一行的索引为 1。例如,单击控件中的某个项目并将 rowIndex 设置为 3。接着,在控件中滚动以更改此行在控件可见行中的位置,然后像之前一样单击同一行。现在,rowIndex 中包含一个不同的值,与当前可见行中的新索引对应。 uid 此项目的唯一标识符。 此项目的唯一标识符。
IListItemRenderer 列表组件的项呈示器和项目编辑器必须实现 IListItemRenderer 接口。mx.core:IDataRendererflash.events:IEventDispatchermx.core:IFlexDisplayObjectmx.managers:ILayoutManagerClientmx.styles:ISimpleStyleClientmx.core:IUIComponent 列表组件的项呈示器和项目编辑器必须实现 IListItemRenderer 接口。IListItemRenderer 接口包含有多个其它接口。它不定义任何新类方法或属性。

这组接口中包含:IDataRenderer、IFlexDisplayObject、ILayoutManagerClient、ISimpleStyleClient 和 IUIComponent。UIComponent 类可实现除 IDataRenderer 接口之外的上述所有接口。因此,如果要创建自定义项呈示器或项目编辑器作为 UIComponent 类的子类,只需实现 IDataRenderer 接口,然后将其添加到其类实现 IDataRenderer 和 IListItemRenderer 的类定义中。

通常,IListItemRenderers 专门用于显示数据提供程序项目中的特定字段,无法在其它 DataGrid 列或其它列表中重新用于其它字段。如果希望创建可以重用的呈示器,也可以实现 IDropInListItemRenderer,该列表会向此呈示器传递更多数据,从而允许其重新用于其它数据字段。

项呈示器和项目编辑器均使用 IDataRenderer 接口从列表类的数据提供程序中传递数据。实现 IDropInListItemRenderer 接口的呈示器和编辑器从列表类中获取其它信息。项呈示器或项目编辑器使用一条或两条信息来显示数据。

呈示器和编辑器经常循环使用。创建之后,只需对其赋予新数据和选择 listData 属性即可再次使用它们。因此,在实现过程中,您必须确保并未假定组件属性包含其初始值或默认值。