包 | mx.core |
类 | public class ComponentDescriptor |
继承 | ComponentDescriptor Object |
子类 | UIComponentDescriptor |
MXML 文件中的大多数标签描述 UIComponent 对象树。例如,<mx:Application>
标签代表 UIComponent 对象,并且其子容器和控件均是 UIComponent 对象。
MXML 编译器将所有这些 MXML 标签均编译为 UIComponentDescriptor 实例。确切地说,MXML 编译器自动生成 ActionScript 数据结构,即 UIComponentDescriptor 对象树。
在运行时,Container 类的 createComponentsFromDescriptors()
方法使用容器的 childDescriptors
数组中 UIComponentDescriptor 对象中的信息创建实际 UIComponent 对象,这些对象是容器的子级以及子级的子级。根据容器的 creationPolicy
属性的值,会在应用程序启动时,组件的某部分将要转为可见状态或应用程序开发人员手动调用 createComponentsFromDescriptors()
方法时,创建子级。
您通常不需要亲自创建 ComponentDescriptor 或 UIComponentDescriptor 实例;您可以通过 Container 类的 childDescriptors
数组访问 MXML 编译器自动生成的此类实例。
另请参见
属性 | 定义方 | ||
---|---|---|---|
constructor : 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 | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object | ||
type : Class MXML 中指定的组件的 Class。 | ComponentDescriptor |
方法 | 定义方 | ||
---|---|---|---|
ComponentDescriptor(descriptorProperties:Object) 构造函数。 | ComponentDescriptor | ||
指示对象是否已经定义了指定的属性。 | Object | ||
使缓存的 properties 属性失效。 | ComponentDescriptor | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
设置循环操作动态属性的可用性。 | Object | ||
返回字符串“ComponentDescriptor_”以及 id 属性的值。 | ComponentDescriptor | ||
返回指定对象的原始值。 | Object |
document | 属性 |
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,这些属性包括其 type 、id 、propertiesFactory 和 events 等。
|
invalidateProperties | () | 方法 |
public function invalidateProperties():void
使缓存的 properties
属性失效。下次读取 properties
属性时,将使用由 propertiesFactory
属性值指定的函数重新生成这些属性。
toString | () | 方法 |
public function toString():String
返回字符串“ComponentDescriptor_”以及 id
属性的值。
String —
字符串“ComponentDescriptor_”以及 id 属性的值。
|