mx.core
public class ComponentDescriptor
继承ComponentDescriptor Inheritance Object
子类 UIComponentDescriptor

ComponentDescriptor 是 UIComponentDescriptor 类的基类,后者封装您在 MXML 标签中为可视组件实例指定的信息。在 Flex 中,不可视组件需要区别对待并且没有描述符;但在将来版本中,可能也会对其使用 ComponentDescriptor 基类。

MXML 文件中的大多数标签描述 UIComponent 对象树。例如,<mx:Application> 标签代表 UIComponent 对象,并且其子容器和控件均是 UIComponent 对象。

MXML 编译器将所有这些 MXML 标签均编译为 UIComponentDescriptor 实例。确切地说,MXML 编译器自动生成 ActionScript 数据结构,即 UIComponentDescriptor 对象树。

在运行时,Container 类的 createComponentsFromDescriptors() 方法使用容器的 childDescriptors 数组中 UIComponentDescriptor 对象中的信息创建实际 UIComponent 对象,这些对象是容器的子级以及子级的子级。根据容器的 creationPolicy 属性的值,会在应用程序启动时,组件的某部分将要转为可见状态或应用程序开发人员手动调用 createComponentsFromDescriptors() 方法时,创建子级。

您通常不需要亲自创建 ComponentDescriptor 或 UIComponentDescriptor 实例;您可以通过 Container 类的 childDescriptors 数组访问 MXML 编译器自动生成的此类实例。

另请参见

mx.core.UIComponentDescriptor
mx.core.Container.childDescriptors
mx.core.Container.creationPolicy
mx.core.Container.createComponentsFromDescriptors()
Creating deferred components


公共属性
 属性定义方
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  document : Object
对将在其中创建组件的文档 Object 的引用。
ComponentDescriptor
  events : Object
MXML 中所指定的包含组件事件处理程序的名称/值对的 Object。
ComponentDescriptor
  id : String
MXML 中指定的组件的标识符。
ComponentDescriptor
  properties : Object
[只读 (read-only)] MXML 中指定的包含组件属性的名称/值对的 Object。
ComponentDescriptor
  propertiesFactory : Function
一个 Function,用于返回 MXML 中指定的包含组件属性的名称/值对的 Object。
ComponentDescriptor
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  type : Class
MXML 中指定的组件的 Class。
ComponentDescriptor
公共方法
 方法定义方
  
ComponentDescriptor(descriptorProperties:Object)
构造函数。
ComponentDescriptor
 Inherited
指示对象是否已经定义了指定的属性。
Object
  
使缓存的 properties 属性失效。
ComponentDescriptor
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
 Inherited
设置循环操作动态属性的可用性。
Object
  
返回字符串“ComponentDescriptor_”以及 id 属性的值。
ComponentDescriptor
 Inherited
返回指定对象的原始值。
Object
属性详细信息
document属性
public var document:Object

对将在其中创建组件的文档 Object 的引用。

另请参见

events属性 
public var events:Object

MXML 中所指定的包含组件事件处理程序的名称/值对的 Object。

例如,如果编写

<mx:DataGrid id="dg" initialize="fetchData(); initDataGrid();"  change="changeHandler(event);"/>

则描述符的 events 属性即为以下 Object

{ initialize: "__dg_initialize", change: "__dg_change" }

如果没有为组件指定 MXML 事件处理程序,则 event 属性为 null

字符串 "__dg_initialize""__dg_change" 是 MXML 编译器自动生成的事件处理函数方法的名称。这些方法的主体中包含您指定为事件属性值的 ActionScript 语句。例如,自动生成的 initialize 处理函数是

public function __dg_initialize(event:mx.events.FlexEvent):void
      {
          fetchData();
          initDataGrid();
      }

您不应认为自动生成的事件处理程序始终由名称指定;在新版本的 Flex 中可能会有所改变。

Container 方法 createComponentsFromDescriptors() 可借助此属性使用 addEventListener() 方法来注册自动生成的事件处理程序。

id属性 
public var id:String

MXML 中指定的组件的标识符。

例如,如果编写

<mx:TextInput id="firstName" text="Enter your first name here"/>

则描述符的 id 属性即为 String "firstName"

如果没有为组件指定 MXML id,则 id 属性为 null

id 属性的值将成为 MXML 文档对象中一个公用变量的名称,由 MXML 编译器自动生成。此变量的值是对使用此描述符创建的 UIComponent 对象的引用。例如,正因为如此,您才可以从包含此 TextInput 实例的文档中的任何位置引用 TextInput 控件的 text 属性作为 firstName.text

如果已指定一个 id,并且是非空字符串,还会成为 DisplayObject 对象的 name。如果未指定 id 或其值为空,则 DisplayObject 对象的 name 将保留自动生成的字符串(如 "Button3"),它由 NameUtil.createUniqueName() 方法返回。name 在生成由 toString() 方法返回的字符串时使用。还可用于通过调用 getChildByName() 从组件的父级中查找组件。

另请参见

properties属性 
properties:Object  [只读 (read-only)]

MXML 中指定的包含组件属性的名称/值对的 Object。

例如,如果编写

<mx:TextInput width="150" text="Hello"/>

则描述符的 properties 属性即为以下 Object

{ width: 150, text: "Hello" }

如果没有为组件指定 MXML 属性,则 properties 属性为 null。在此情形下,组件将使用默认属性值。

此 Object 通过调用由 propertiesFactory 属性指定的函数生成,然后缓存以供后续访问。然而,当 Repeater 使用同一描述符生成多个组件实例时,应为每个组件实例生成 properties Object 的一个全新副本,使它们不用共享作为 Array 或 Object 引用的属性值。Repeater 通过在描述符上调用 invalidateProperties() 方法来完成此操作。



实现
    public function get properties():Object

另请参见

propertiesFactory属性 
public var propertiesFactory:Function

一个 Function,用于返回 MXML 中指定的包含组件属性的名称/值对的 Object。

例如,如果编写

<mx:TextInput width="150" text="Hello">

则描述符的 propertiesFactory 属性即为以下 Function:

function():Object { return { width: 150, text: "Hello" }; }

如果没有为组件指定 MXML 属性,则 propertiesFactory 属性为 null。在此情形下,组件将使用默认属性值。

propertyFactory 是一个可返回 Object 的 Function 而不是一个实际 Object,这是由于 ComponentDescriptor 对象树是允许逐渐“展开”的。如果描述符树中关于文档的所有描述符都在启动时创建,则启动时间就会延长。

properties 属性返回一个缓存 Object,此对象由该工厂函数生成。

注意:事件处理程序(如 click="doSomething();")位于 events Object 中,而不位于 properties Object 中。

另请参见

type属性 
public var type:Class

MXML 中指定的组件的 Class。

例如,如果编写

<mx:TextInput/>

则描述符的 type 属性即为类 mx.controls.TextInput。

对于由 MXML 编译器创建的 ComponentDescriptor 对象而言,此属性始终非 null,因为每个 MXML 标签都有一个标签名,如 mx:TextInput。

MXML 标签与其对应类之间的映射由 XML 命名空间和与此命名空间关联的“清单”文件(如果存在)确定。例如,由 mx: 前缀表示的标准 Flex 命名空间 http://www.adobe.com/2006/mxml 与清单文件 mxml-manifest.xml 关联(在 flex-config.xml 文件中),此文件具有以下标签

<component id="TextInput" class="mx.controls.TextInput"/>

可将标签名 mx:TextInput 映射到 Class mx.controls.TextInput。请注意,使用清单文件允许将一个 XML 命名空间中的组件映射到多个 ActionScript 包中的类。

构造函数详细信息
ComponentDescriptor()构造函数
public function ComponentDescriptor(descriptorProperties:Object)

构造函数。

参数
descriptorProperties:Object — 包含 ComponentDescriptor 对象属性的名称/值对的 Object,这些属性包括其 typeidpropertiesFactoryevents 等。
方法详细信息
invalidateProperties()方法
public function invalidateProperties():void

使缓存的 properties 属性失效。下次读取 properties 属性时,将使用由 propertiesFactory 属性值指定的函数重新生成这些属性。

toString()方法 
public function toString():String

返回字符串“ComponentDescriptor_”以及 id 属性的值。

返回
String — 字符串“ComponentDescriptor_”以及 id 属性的值。