- 浏览: 68469 次
- 性别:
- 来自: 北京
最新评论
-
_MyCould:
Flex Module基础 -
szlaptop:
这个正式我一直想的,楼主,能帖图上来看看吗?谢谢
最近完成的某系统的报表组件 -
wfzhanga:
楼主整理的不错,能不能把代码传上去啊。如果方便请帮我传一下啊, ...
flex ToolTip专题 -
bence:
总结的很好,谢谢分享
Flex Metadata Tag高级应用 -
fansfirst2008:
楼主太强了,不仅把东西讲解得深入浅出,而且写的文字表达很漂亮! ...
flex itemRenderer使用(一)内联渲染器
原文地址:http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_3.html
下表是可以用在ActionScript类中的元数据标签:
[ArrayElementType] 指定数组中每个元素的数据类型。
[Bindable] 把一个属性标记为可以用作数据绑定表达式的源。
[DefaultProperty] 当把组件用在MXML文件中时,定义这个组件的默认属性的名字。
[Deprecated] 把一个类或类元素标记为不赞成使用的。这样当应用程序中使用了它时,编译器能识别出来,并给出一个警告。
[Effect] 定义效果的MXML属性名称。
[Embed] 在编译时导入JPEG、GIF、PNG、SVG及SWF文件。也能从SWC中导入图片。它跟MXML语法@Embed的作用一样。
[Event] 为一个事件定义MXML属性,并定义这个组件发出的事件对象的数据类型。
[Exclude] 在Flex Builder标签检查器中忽略掉类的元素。用法如:[Exclude(name="label",kind="property")]
[ExcludeClass] 在Flex Builder 标签检查器中忽略掉这个类。它等同于在ASDoc中的@private
[IconFile] 指定用在Flex Builder插入面板中的表示组件的图标文件的名称。
[Inspectable] 定义在Flex Builder 属性提示和标签检查器中显示给组件使用者的属性。
[InstanceType] 指定IDeferredInstance类型的属性的数据类型。
[NonCommittingChangeEvent] 把一个事件指定为临时触发器。
[RemoteClass] 把ActionScript对象映射为一个Java对象。
[Style] 定义组件的MXML样式属性。
[Transient] 指定当用[RemoteClass]把ActionScript对象映射到Java对象,把这个对象传输到服务器上时应该忽略掉的属性数据。
ArrayElementType 元数据标签
当你使用ActionScript定义一个Array变量时,你把这个变量的数据类型指定为Array,但是你却不能指定Array中每个元素的数据类型。要想让Flex编译器检查数组的元素的数据类型,你可以像下面这样,使用[ArrayElementType]指定数组元素允许的数据类型:
public class MyTypedArrayComponent extends VBox {
[ArrayElementType("String")]
public var newStringProperty:Array;
[ArrayElementType("Number")]
public var newNumberProperty:Array;
...
}
注意:MXML编译器只检查MXML代码中Array的正确性;它不检查ActionScript代码中的用法是否正确。
在这个例子中,数组元素允许的数据类型为String。如果尝试把非String类型的元素添加到这个数组中,编译器会报语法错误:
<MyComp:MyTypedArrayComponent>
<MyComp:newStringProperty>
<mx:Number>94062</mx:Number>
<mx:Number>14850</mx:Number>
<mx:Number>53402</mx:Number>
</MyComp:newStringProperty>
</MyComp:MyTypedArrayComponent>
在这个例子中,你尝试用Number对象初始化这个数组,因此编译器会给出错误提示。
也可以使用标签属性指定Array属性,而不是使用子标签,如下:
<MyComp:MyTypedArrayComponent newNumberProperty=”[abc,def]“/>
这段MXML代码会报错,因为Flex无法把字符串”abc”和”def”转换成数字。
[ArrayElementType]元数据标签应该插入到变量定义之前,该标签用法如下:
[ArrayElementType("elementType")]
下面的表格描述了[ArrayElementType]元数据标签的属性:
属性 类型 描述
elementType
String 指定数组元素的数据类型,可以是任何一种ActionScript数据类型,比如String,Number,class或interface.你必须使用完整限定类名指定这个类型,包括包名。
Bindable元数据类型
如果一个属性是数据绑定表达式的源,当源数据改变时,Flex自动把数据拷贝给所有目标属性。要想让Flex执行这个拷贝动作,你必须使用[Bindable]元数据标签,向Flex注册属性,并且源属性必须广播一个事件。
[Bindable]元数据标签用法如下:
[Bindable]
[Bindable(event="eventname")]
如果你省略了事件名称,Flex自动创建一个名为PropertyChange的事件。
更多关于数据绑定和该元数据标签的信息,参见绑定数据。
使用可绑定的属性链
当你把一个属性指定为数据绑定源时,Flex不但监听这个发生改变的属性,而且监听关联它的整个链。这整个属性链,包括目标属性,称为可绑定的属性链。在下面的例子中,firstName.text是一个包含firstName对象和它的text属性的绑定的属性链:
<first>{firstName.text}</first>
当链中任何属性发生改变时,你都应该生成一个事件。如果这个属性使用[Bindable]元数据标签标记了,那么Flex为为你生成这个事件。
下面的例子把[Bindable]用在变量和getter属性上。这个例子同样展示了如何调用dispatchEvent()函数:
[Bindable]
public var minFontSize:Number = 5;
[Bindable("textChanged")]
public function get text():String {
return myText;
}
public function set text(t : String):void {
myText = t;
dispatchEvent( new Event( "textChanged" ) );}
如果你省略了[Bindable]中事件的名称,Flex编译器会自动生成并广播名为propertyChange的事件,以便这个属性可以用作数据绑定表达式的源。
你应该把对象的确切信息提供给编译器,也就是说应该把对象转换成已知的类型。在下面的例子中,myList列表控件,包含Customer对象,因此selectedItem属性转换成Customer对象:
<mx:Model id=”selectedCustomer”>
<customer>
<name>{Customer(myList.selectedItem).name}</name>
<address>{Customer(myList.selectedItem).address}</address>
…
</customer>
</mx:Model>
在某些情形下,绑定不会如预想的那样自动运行。比如,当你改变一个dataProvider属性的一个元素时:
dataProvider[i] = newItem
当源数据的子属性发生改变时,绑定也不会自动执行,如下:
[Bindable]
var temp;
// 会触发绑定
temp = new Object();
// 不会触发绑定,因为label不是一个可绑定的属性
temp.label = foo;
...
在这个例子中,{temp.label}的问题出在temp是一个Object。可以用下面中的一种解决这个问题:
* 预先初始化这个对象
* 把一个ObjectProxy赋值给temp;ObjectProxy的所有属性都是可绑定的
* 把temp制作成包含可绑定属性label的强类型对象
当绑定到FlashPlayer自动刷新的属性上(比如mouseX)时,绑定也不会起作用。
UIComponent的executeBindings()方法执行所有的目标为该UIComponent对象的绑定。所有的容器、控件,包括Repeater组件,都扩展自UIComponent。Container和Repeater类的executeChildBindings()执行容器和Repeater的子UIComponent是绑定目标的绑定。所有的容器都扩展自Container类。
这些方法给你提供了一种当绑定没有如预想的执行时,你可以的选择。通过添加一行代码,比如调用executeChildBindings()方法,你可以在做了更改而没有执行绑定时更新用户界面。但是,如果你明确知道绑定不会自动执行时,就不应该调用executeBindings()。
DefaultProperty元数据标签
当你在MXML文件中使用组件时,[DefaultProperty]元数据标签指定该组件的默认属性。
[DefaultProperty]标签的用法如下:
[DefaultProperty("propertyName")]
propertyName指定默认的属性名称。
你可以使用[DefaultProperty]标签在你的ActionScript组件中定义一个唯一的默认属性。更多信息及示例,参见创建一个默认属性。
Deprecated元数据标签
标记为deprecated的类或类元素就意味着过时的,在当前版本中不赞成使用的。如果坚持使用它,编译器会给出警告。
mxmlc命令行编译器有一个show-deprecated-warning编译选项,如果设成true,那么当你的应用程序使用了不赞成使用的类或类元素时,编译器会生成警告。默认值是true。
[Deprecated]标签插入到属性、方法或类定义前面,以便把这些元素标记为不赞成使用的。[Deprecated]标签有如下用法:
[Deprecated("string_describing_deprecation")]
[Deprecated(message="string_describing_deprecation")]
[Deprecated(replacement="string_specifying_replacement")]
[Deprecated(replacement="string_specifying_replacement", since="version_of_replacement")]
下面的代码使用[Deprecated]标签把dataProvider属性标记为过时的:
[Deprecated(replacement="MenuBarItem.data")]
public function set dataProvider(value:Object):void
{
...
}
[Event],[Effect]和[Style]标签中也有不支持使用选项:
[Event(... , deprecatedMessage="string_describing_deprecation")]
[Event(... , deprecatedReplacement="change2")]
[Event(... , deprecatedReplacement="string_specifying_replacement", deprecatedSince="version_of_replacement")]
这些标签支持DeprecatedReplacement和DeprecatedSince属性来把事件、效果、样式标记为不赞成使用的。
Effect元数据标签
[Effect]元数据标签定义你想要赋值给组件的效果名字,和触发效果的事件。如果你定义了一个自定义效果,你可以使用[Effect]标签把它指定给Flex编译器。
一个特效包含触发它的触发器。触发器就是一个事件,比如组件的鼠标点击事件,一个组件获得了焦点,或一个组件变得可见了。一个特效就是发生在组件上的可见的或可听到的会持续一段时间的变化。
把[Effect]标签插入到ActionScript文件的类定义之前或MXML文件中的<mx:Metadata>块内。[Effect]标签的用法如下:
[Effect(name="eventNameEffect", event="eventName")]
下表描述了[Effect]标签的属性:
属性 类型 描述
eventNameEffect
String 指定特效名称。
eventName
String 指定触发特效的事件名称。
[Effect]标签经常同[Event]标签成对出现,[Event]标签定义对应[Effect]触发器的事件。习惯上,特效的名称就是事件名,加上后缀Effect。如下面ActionScript文件中的例子:
// Define event corresponding to the effect trigger.
[Event(name="darken", type="flash.events.Event")]
// Define the effect.
[Effect(name="darkenEffect", event="darken")]
class ModalText extends TextArea {
...
}
在MXML文件中,你可以像下面这样在<mx:Metadata>块内定义[Effect]和[Event]:
<mx:Metadata>
[Event(name="darken", type="flash.events.Event")]
[Effect(name="darkenEffect", event="darken")]
</mx:Metadata>
Event元数据标签
使用[Event]标签定义MXML中的事件属性及组件生成的事件对象的类型。[Event]标签插入到ActionScript文件的类定义前,或者MXML文件的<mx:Metadata>块内。
[Event]元数据标签用法如下:
[Event(name="eventName", type="package.eventType")]
下面的表格描述了[Event]标签的属性:
属性 类型 描述
eventName
String 指定事件名称,包括包名。
eventType
String 指定定义事件对象的数据类型的类。类名可以是事件基类,Events或者Events的子类。必须包含包名。
下面的例子指定组件可广播的事件为myClickEvent:
[Event(name="myClickEvent", type="flash.events.Event")]
如果没在类文件中使用[Event]标签指定事件,而却在MXML文件中使用事件时编译器会报错。任何组件都可以在ActionScript中使用addEventListener()方法注册事件监听,即使没有[Event]标签。
下面的例子指定myClickEvent为ActionScript组件可以广播的事件:
[Event(name="myEnableEvent", type="flash.events.Event")]
public class MyComponent extends UIComponent
{
...
}
下面的例子展示了在MXML文件中在<mx:Metadata>标签内使用[Event]标签:
<?xml version=”1.0″?>
<!– TextAreaEnabled.mxml –>
<mx:TextArea xmlns:mx=”http://www.adobe.com/2006/mxml”>
<mx:Metadata>
[Event(name="myEnableEvent", type="flash.events.Event")]
</mx:Metadata>
….
</mx:TextArea>
IconFile元数据标签
使用[IconFile]指定Flex Builder插入面板中组件显示外观的文件名。
[IconFile]的用法如下:
[IconFile("fileName")]
fileName属性指定包含图标的PNG,GIF或JPEG文件,如下面例子:
[IconFile("MyButton.png")]
public class MyButton extends Button
{
...
}
Inspectable元数据标签
[Inspectable]元数据标签定义在Flex Builder 属性提示和标签检查器中显示给组件使用者的属性。[Inspectable]标签对代码提示和属性检查器而言并非必须的。下面的规则决定了Flex Builder如何显示信息:
* 组件的所有公共属性都显示在代码提示和属性检查器中。如果你想为属性添加额外的信息,比如枚举值或者说明一个字符串表示文件路径,则可使用[Inspectable]标签添加这些信息。
* 组件的代码提示和属性检查器中的信息源自相同的数据。因此,如果信息在一个地方出现了,则另一个地方也肯定会出现。
* 对于ActionScript组件,并不需要元数据才能正常工作,因此根据当前范围的不同,你总是能看到正确的代码提示。Flex Builder使用public,protected,private 和static关键字,加上当前范围,决定显示哪些ActionScript代码提示。
[Inspectable]标签必须紧贴在变量声明或者setter和getter方法之前。[Inspectable]元数据标签用法如下:
[Inspectable(attribute=value[,attribute=value,...])]
property_declaration name:type;
[Inspectable(attribute=value[,attribute=value,...])]
setter_getter_declarations;
下表描述了[Inspectable]元数据标签的属性:
属性 类型 描述
category
String 把属性归类到Flex Builder用户界面中的属性检查器的子分类中。默认的分类是”Other”。可能的值有“Common”, “Effects”, “Events”, “Layout Constraints”, “Size”, “Styles”, 或 “Other”。
defaultValue
String 或
Number 设置显示在属性检查器中的属性的初始值。默认值由属性定义决定。
enumeration
String 用以逗号分隔的列表指定该属性的合法值。只有这些值是允许使用的;比如, item1,item2,item3。注意各项之间并没有空格。这些信息会出现在代码提示和属性检查器中。如果你定义了Boolean变量,即便没有指定枚举值,Flex BuilderT也会自动显示true和false的提示。
environment
String 指定哪些属性不应该显示(enviroment=none),哪些只能用于Flex Builder(enviroment=Flash),哪些只能用于Flex而非Flex Builder(enviroment=MXML)。
format
String 决定属性检查器中你编辑的这个属性的值的数据类型。当属性的数据类型没有显示出它的功能时,你可以使用这个来展示。比如,对于一个Number类型的属性,你可以指定format=”Color”以便在你编辑该属性时,Flex Builder打开一个颜色编辑器。format属性的常用值包括 “Length”, “Color”, “Time”, “EmbeddedFile”, 和 “File”。
listOffset
Number 指定List值的索引。
name
String 指定属性的显示名称;比如,Font Width。如果没有指定,则使用属性名,比如_fontWidth。
type
String 指定数据类型。如果省略掉,则使用属性的类型。下面是有效的值:
■Array
■Boolean
■Color
■Font Name
■List
■Number
■Object
■String
如果是Array,你必须列出该数组的有效值。
variable
String 指定参数的约束。
verbose
Number 指定只有用户指定了verbose属性要显示才显示在Flex Builder界面上。如果没指定这个属性,Flex Builder假定属性应该显示出来。
下面的例子定义myProp参数为Inspectable:
[Inspectable(defaultValue=true, verbose=1, category="Other")]
public var myProp:Boolean;
InstanceType元数据标签
[InstanceType]标签指定IDeferredInstance类型的属性的数据类型,如下例子所示:
// Define a deferred property for the top component.
[InstanceType("mx.controls.Label")]
public var topRow:IDeferredInstance;
Flex编译器会检查只有指定数据类型的值能赋给这个属性。在这个例子中,如果组件使用者把mx.controls.Label之外类型的值赋给了topRow,编译器会生成一条错误消息。
当创建模版组件时应该使用[InstanceType]元数据标签,更多信息,请阅读模版组件。
[InstanceType]元数据标签用法如下:
[InstanceType("package.className")]
你必须指定完全限定的包和类名。
NonCommittingChangeEvent元数据标签
[NonCommittingChangeEvent]元数据标签把一个事件指定为临时触发器,也就是说该事件不应该调用Flex在该属性上的数据验证。你把该标签用在可能经常改变值而又不必每次改变都要验证的属性上。
一个例子是假如你为一个TextInput控件的text属性指定了一个验证,每次按下键,text属性值都会改变,但是在用户按下Enter键之前或焦点离开该控件之前你都不想进行验证,NonCommittingChangeEvent标签允许你广播一个change事件,但它不会触发验证。
[NonCommittingChangeEvent]标签应该插入到ActionScript的属性定义或者setter/getter方法之前。其用法如下:
[NonCommittingChangeEvent("event_name")]
在下面的例子中,每次用户按键,组件都会广播一个change事件,但是这个事件并不会触发数据绑定或数据验证。当用户按下了Enter键后,组件广播一个valueCommit事件来触发数据绑定或数据验证:
[Event(name="change", type="flash.events.Event")]
class MyText extends UIComponent {
...
[Bindable(event="valueCommit")]
[NonCommittingChangeEvent("change")]
function get text():String {
return getText();
}
function set text(t):void {
setText(t);
// Dispatch events.
}
}
RemoteClass元数据标签
使用[RemoteClass]元数据标签向Flex注册这个类,这样当使用Action Message Format(AMF)序列化该类的实例时,Flex就会保留这个类的类型信息。[RemoteClass]标签要插入到类定义之前。其用法如下:
[RemoteClass]
在客户端程序中你也可以使用该标签表示一个服务器端Java对象。你使用[RemoteClass(alias=" ")]元数据标签创建一个直接映射到Java对象的ActionScript对象。你要用alias的值指定Java对象的完全限定类名。更多信息请阅读使用Flex访问服务器端数据。
Style元数据标签
使用[Style]标签定义组件定义组件的MXML标签样式属性。[Style]标签要插入到ActionScript类定义之前,或MXML文件中的<mx:Metadata>块内,其用法如下:
[Style(name="style_name"[,property="value",...])]
下表描述了[Style]元数据标签的属性:
选项 类型 描述
name
String (必须) 指定样式名称。
type
String 指定样式属性值的数据类型。如果类型不是一个像Number、Date这样的ActionScript类型,就要使用 packageName.className。
arrayType
String 如果type是Array,那么arrayType指定Array元素的数据类型。如果类型不是一个像Number、Date这样的ActionScript类型,就要使用 packageName.className。
format
String 指定属性单元。比如,如果你指定类型为”Number”,你可能指定format=”Length”表示该样式定义像素长度。或者,你指定type=”uint”,设置format=”Color”,表示该样式定义一个RGB颜色。
enumeration
String 指定该样式属性可能的枚举列表值。
inherit
String 指定该属性是否为继承的。有效的值为yes和no。该属性引用CSS继承结构,而非面向对象的继承结构。所有的子类都自动用面向对象的继承从超类继承定义的样式属性。一些样式属性以CSS继承的方式继承样式属性。如果你在父容器上定义了一个可继承的样式属性,它的孩子都会继承该样式属性。比如,如果你把一个Panel容器的fontFamily定义成Times,该容器的所有孩子都会使用Times作为fontFamily,除非它们覆盖了这个属性。如果设置了非可继承的样式,比如在父容器上设置textDecoration,那么只有这个父容器而非它的孩子使用这个样式。更多关于可继承的样式属性的信息,请阅读 关于样式继承。
states
String 对于皮肤属性,你可以使用这个样式指定组件多种状态中的一种状态。例如,Slider.thumbSkin样式的定义使用下面的[Style]元数据标签:[Style(name="thumbSkin", type="Class", inherit="no", states="disabled, down,
over, up")]
这一行说明你可以使用Slider.thumbSkin样式指定Slider控件的disable, down, over, 和 up 的状态。更多信息,请阅读 创建皮肤.
下面的例子演示了textSelectedColor样式属性的定义:
[Style(name="textSelectedColor",type="Number",format="Color",inherit="yes")]
下面的例子演示了verticalAlign样式属性的定义:
[Style(name="verticalAlign", type="String", enumeration="bottom,middle,top", inherit="no")]
更多关于[Style]元数据标签的信息,参见自定义样式属性。
Transient元数据标签
[Transient]元数据标签指定当用[RemoteClass]把ActionScript对象映射到Java对象,把这个对象传输到服务器上时应该忽略掉的属性数据
[Transient]
public var count:Number = 5;
下表是可以用在ActionScript类中的元数据标签:
[ArrayElementType] 指定数组中每个元素的数据类型。
[Bindable] 把一个属性标记为可以用作数据绑定表达式的源。
[DefaultProperty] 当把组件用在MXML文件中时,定义这个组件的默认属性的名字。
[Deprecated] 把一个类或类元素标记为不赞成使用的。这样当应用程序中使用了它时,编译器能识别出来,并给出一个警告。
[Effect] 定义效果的MXML属性名称。
[Embed] 在编译时导入JPEG、GIF、PNG、SVG及SWF文件。也能从SWC中导入图片。它跟MXML语法@Embed的作用一样。
[Event] 为一个事件定义MXML属性,并定义这个组件发出的事件对象的数据类型。
[Exclude] 在Flex Builder标签检查器中忽略掉类的元素。用法如:[Exclude(name="label",kind="property")]
[ExcludeClass] 在Flex Builder 标签检查器中忽略掉这个类。它等同于在ASDoc中的@private
[IconFile] 指定用在Flex Builder插入面板中的表示组件的图标文件的名称。
[Inspectable] 定义在Flex Builder 属性提示和标签检查器中显示给组件使用者的属性。
[InstanceType] 指定IDeferredInstance类型的属性的数据类型。
[NonCommittingChangeEvent] 把一个事件指定为临时触发器。
[RemoteClass] 把ActionScript对象映射为一个Java对象。
[Style] 定义组件的MXML样式属性。
[Transient] 指定当用[RemoteClass]把ActionScript对象映射到Java对象,把这个对象传输到服务器上时应该忽略掉的属性数据。
ArrayElementType 元数据标签
当你使用ActionScript定义一个Array变量时,你把这个变量的数据类型指定为Array,但是你却不能指定Array中每个元素的数据类型。要想让Flex编译器检查数组的元素的数据类型,你可以像下面这样,使用[ArrayElementType]指定数组元素允许的数据类型:
public class MyTypedArrayComponent extends VBox {
[ArrayElementType("String")]
public var newStringProperty:Array;
[ArrayElementType("Number")]
public var newNumberProperty:Array;
...
}
注意:MXML编译器只检查MXML代码中Array的正确性;它不检查ActionScript代码中的用法是否正确。
在这个例子中,数组元素允许的数据类型为String。如果尝试把非String类型的元素添加到这个数组中,编译器会报语法错误:
<MyComp:MyTypedArrayComponent>
<MyComp:newStringProperty>
<mx:Number>94062</mx:Number>
<mx:Number>14850</mx:Number>
<mx:Number>53402</mx:Number>
</MyComp:newStringProperty>
</MyComp:MyTypedArrayComponent>
在这个例子中,你尝试用Number对象初始化这个数组,因此编译器会给出错误提示。
也可以使用标签属性指定Array属性,而不是使用子标签,如下:
<MyComp:MyTypedArrayComponent newNumberProperty=”[abc,def]“/>
这段MXML代码会报错,因为Flex无法把字符串”abc”和”def”转换成数字。
[ArrayElementType]元数据标签应该插入到变量定义之前,该标签用法如下:
[ArrayElementType("elementType")]
下面的表格描述了[ArrayElementType]元数据标签的属性:
属性 类型 描述
elementType
String 指定数组元素的数据类型,可以是任何一种ActionScript数据类型,比如String,Number,class或interface.你必须使用完整限定类名指定这个类型,包括包名。
Bindable元数据类型
如果一个属性是数据绑定表达式的源,当源数据改变时,Flex自动把数据拷贝给所有目标属性。要想让Flex执行这个拷贝动作,你必须使用[Bindable]元数据标签,向Flex注册属性,并且源属性必须广播一个事件。
[Bindable]元数据标签用法如下:
[Bindable]
[Bindable(event="eventname")]
如果你省略了事件名称,Flex自动创建一个名为PropertyChange的事件。
更多关于数据绑定和该元数据标签的信息,参见绑定数据。
使用可绑定的属性链
当你把一个属性指定为数据绑定源时,Flex不但监听这个发生改变的属性,而且监听关联它的整个链。这整个属性链,包括目标属性,称为可绑定的属性链。在下面的例子中,firstName.text是一个包含firstName对象和它的text属性的绑定的属性链:
<first>{firstName.text}</first>
当链中任何属性发生改变时,你都应该生成一个事件。如果这个属性使用[Bindable]元数据标签标记了,那么Flex为为你生成这个事件。
下面的例子把[Bindable]用在变量和getter属性上。这个例子同样展示了如何调用dispatchEvent()函数:
[Bindable]
public var minFontSize:Number = 5;
[Bindable("textChanged")]
public function get text():String {
return myText;
}
public function set text(t : String):void {
myText = t;
dispatchEvent( new Event( "textChanged" ) );}
如果你省略了[Bindable]中事件的名称,Flex编译器会自动生成并广播名为propertyChange的事件,以便这个属性可以用作数据绑定表达式的源。
你应该把对象的确切信息提供给编译器,也就是说应该把对象转换成已知的类型。在下面的例子中,myList列表控件,包含Customer对象,因此selectedItem属性转换成Customer对象:
<mx:Model id=”selectedCustomer”>
<customer>
<name>{Customer(myList.selectedItem).name}</name>
<address>{Customer(myList.selectedItem).address}</address>
…
</customer>
</mx:Model>
在某些情形下,绑定不会如预想的那样自动运行。比如,当你改变一个dataProvider属性的一个元素时:
dataProvider[i] = newItem
当源数据的子属性发生改变时,绑定也不会自动执行,如下:
[Bindable]
var temp;
// 会触发绑定
temp = new Object();
// 不会触发绑定,因为label不是一个可绑定的属性
temp.label = foo;
...
在这个例子中,{temp.label}的问题出在temp是一个Object。可以用下面中的一种解决这个问题:
* 预先初始化这个对象
* 把一个ObjectProxy赋值给temp;ObjectProxy的所有属性都是可绑定的
* 把temp制作成包含可绑定属性label的强类型对象
当绑定到FlashPlayer自动刷新的属性上(比如mouseX)时,绑定也不会起作用。
UIComponent的executeBindings()方法执行所有的目标为该UIComponent对象的绑定。所有的容器、控件,包括Repeater组件,都扩展自UIComponent。Container和Repeater类的executeChildBindings()执行容器和Repeater的子UIComponent是绑定目标的绑定。所有的容器都扩展自Container类。
这些方法给你提供了一种当绑定没有如预想的执行时,你可以的选择。通过添加一行代码,比如调用executeChildBindings()方法,你可以在做了更改而没有执行绑定时更新用户界面。但是,如果你明确知道绑定不会自动执行时,就不应该调用executeBindings()。
DefaultProperty元数据标签
当你在MXML文件中使用组件时,[DefaultProperty]元数据标签指定该组件的默认属性。
[DefaultProperty]标签的用法如下:
[DefaultProperty("propertyName")]
propertyName指定默认的属性名称。
你可以使用[DefaultProperty]标签在你的ActionScript组件中定义一个唯一的默认属性。更多信息及示例,参见创建一个默认属性。
Deprecated元数据标签
标记为deprecated的类或类元素就意味着过时的,在当前版本中不赞成使用的。如果坚持使用它,编译器会给出警告。
mxmlc命令行编译器有一个show-deprecated-warning编译选项,如果设成true,那么当你的应用程序使用了不赞成使用的类或类元素时,编译器会生成警告。默认值是true。
[Deprecated]标签插入到属性、方法或类定义前面,以便把这些元素标记为不赞成使用的。[Deprecated]标签有如下用法:
[Deprecated("string_describing_deprecation")]
[Deprecated(message="string_describing_deprecation")]
[Deprecated(replacement="string_specifying_replacement")]
[Deprecated(replacement="string_specifying_replacement", since="version_of_replacement")]
下面的代码使用[Deprecated]标签把dataProvider属性标记为过时的:
[Deprecated(replacement="MenuBarItem.data")]
public function set dataProvider(value:Object):void
{
...
}
[Event],[Effect]和[Style]标签中也有不支持使用选项:
[Event(... , deprecatedMessage="string_describing_deprecation")]
[Event(... , deprecatedReplacement="change2")]
[Event(... , deprecatedReplacement="string_specifying_replacement", deprecatedSince="version_of_replacement")]
这些标签支持DeprecatedReplacement和DeprecatedSince属性来把事件、效果、样式标记为不赞成使用的。
Effect元数据标签
[Effect]元数据标签定义你想要赋值给组件的效果名字,和触发效果的事件。如果你定义了一个自定义效果,你可以使用[Effect]标签把它指定给Flex编译器。
一个特效包含触发它的触发器。触发器就是一个事件,比如组件的鼠标点击事件,一个组件获得了焦点,或一个组件变得可见了。一个特效就是发生在组件上的可见的或可听到的会持续一段时间的变化。
把[Effect]标签插入到ActionScript文件的类定义之前或MXML文件中的<mx:Metadata>块内。[Effect]标签的用法如下:
[Effect(name="eventNameEffect", event="eventName")]
下表描述了[Effect]标签的属性:
属性 类型 描述
eventNameEffect
String 指定特效名称。
eventName
String 指定触发特效的事件名称。
[Effect]标签经常同[Event]标签成对出现,[Event]标签定义对应[Effect]触发器的事件。习惯上,特效的名称就是事件名,加上后缀Effect。如下面ActionScript文件中的例子:
// Define event corresponding to the effect trigger.
[Event(name="darken", type="flash.events.Event")]
// Define the effect.
[Effect(name="darkenEffect", event="darken")]
class ModalText extends TextArea {
...
}
在MXML文件中,你可以像下面这样在<mx:Metadata>块内定义[Effect]和[Event]:
<mx:Metadata>
[Event(name="darken", type="flash.events.Event")]
[Effect(name="darkenEffect", event="darken")]
</mx:Metadata>
Event元数据标签
使用[Event]标签定义MXML中的事件属性及组件生成的事件对象的类型。[Event]标签插入到ActionScript文件的类定义前,或者MXML文件的<mx:Metadata>块内。
[Event]元数据标签用法如下:
[Event(name="eventName", type="package.eventType")]
下面的表格描述了[Event]标签的属性:
属性 类型 描述
eventName
String 指定事件名称,包括包名。
eventType
String 指定定义事件对象的数据类型的类。类名可以是事件基类,Events或者Events的子类。必须包含包名。
下面的例子指定组件可广播的事件为myClickEvent:
[Event(name="myClickEvent", type="flash.events.Event")]
如果没在类文件中使用[Event]标签指定事件,而却在MXML文件中使用事件时编译器会报错。任何组件都可以在ActionScript中使用addEventListener()方法注册事件监听,即使没有[Event]标签。
下面的例子指定myClickEvent为ActionScript组件可以广播的事件:
[Event(name="myEnableEvent", type="flash.events.Event")]
public class MyComponent extends UIComponent
{
...
}
下面的例子展示了在MXML文件中在<mx:Metadata>标签内使用[Event]标签:
<?xml version=”1.0″?>
<!– TextAreaEnabled.mxml –>
<mx:TextArea xmlns:mx=”http://www.adobe.com/2006/mxml”>
<mx:Metadata>
[Event(name="myEnableEvent", type="flash.events.Event")]
</mx:Metadata>
….
</mx:TextArea>
IconFile元数据标签
使用[IconFile]指定Flex Builder插入面板中组件显示外观的文件名。
[IconFile]的用法如下:
[IconFile("fileName")]
fileName属性指定包含图标的PNG,GIF或JPEG文件,如下面例子:
[IconFile("MyButton.png")]
public class MyButton extends Button
{
...
}
Inspectable元数据标签
[Inspectable]元数据标签定义在Flex Builder 属性提示和标签检查器中显示给组件使用者的属性。[Inspectable]标签对代码提示和属性检查器而言并非必须的。下面的规则决定了Flex Builder如何显示信息:
* 组件的所有公共属性都显示在代码提示和属性检查器中。如果你想为属性添加额外的信息,比如枚举值或者说明一个字符串表示文件路径,则可使用[Inspectable]标签添加这些信息。
* 组件的代码提示和属性检查器中的信息源自相同的数据。因此,如果信息在一个地方出现了,则另一个地方也肯定会出现。
* 对于ActionScript组件,并不需要元数据才能正常工作,因此根据当前范围的不同,你总是能看到正确的代码提示。Flex Builder使用public,protected,private 和static关键字,加上当前范围,决定显示哪些ActionScript代码提示。
[Inspectable]标签必须紧贴在变量声明或者setter和getter方法之前。[Inspectable]元数据标签用法如下:
[Inspectable(attribute=value[,attribute=value,...])]
property_declaration name:type;
[Inspectable(attribute=value[,attribute=value,...])]
setter_getter_declarations;
下表描述了[Inspectable]元数据标签的属性:
属性 类型 描述
category
String 把属性归类到Flex Builder用户界面中的属性检查器的子分类中。默认的分类是”Other”。可能的值有“Common”, “Effects”, “Events”, “Layout Constraints”, “Size”, “Styles”, 或 “Other”。
defaultValue
String 或
Number 设置显示在属性检查器中的属性的初始值。默认值由属性定义决定。
enumeration
String 用以逗号分隔的列表指定该属性的合法值。只有这些值是允许使用的;比如, item1,item2,item3。注意各项之间并没有空格。这些信息会出现在代码提示和属性检查器中。如果你定义了Boolean变量,即便没有指定枚举值,Flex BuilderT也会自动显示true和false的提示。
environment
String 指定哪些属性不应该显示(enviroment=none),哪些只能用于Flex Builder(enviroment=Flash),哪些只能用于Flex而非Flex Builder(enviroment=MXML)。
format
String 决定属性检查器中你编辑的这个属性的值的数据类型。当属性的数据类型没有显示出它的功能时,你可以使用这个来展示。比如,对于一个Number类型的属性,你可以指定format=”Color”以便在你编辑该属性时,Flex Builder打开一个颜色编辑器。format属性的常用值包括 “Length”, “Color”, “Time”, “EmbeddedFile”, 和 “File”。
listOffset
Number 指定List值的索引。
name
String 指定属性的显示名称;比如,Font Width。如果没有指定,则使用属性名,比如_fontWidth。
type
String 指定数据类型。如果省略掉,则使用属性的类型。下面是有效的值:
■Array
■Boolean
■Color
■Font Name
■List
■Number
■Object
■String
如果是Array,你必须列出该数组的有效值。
variable
String 指定参数的约束。
verbose
Number 指定只有用户指定了verbose属性要显示才显示在Flex Builder界面上。如果没指定这个属性,Flex Builder假定属性应该显示出来。
下面的例子定义myProp参数为Inspectable:
[Inspectable(defaultValue=true, verbose=1, category="Other")]
public var myProp:Boolean;
InstanceType元数据标签
[InstanceType]标签指定IDeferredInstance类型的属性的数据类型,如下例子所示:
// Define a deferred property for the top component.
[InstanceType("mx.controls.Label")]
public var topRow:IDeferredInstance;
Flex编译器会检查只有指定数据类型的值能赋给这个属性。在这个例子中,如果组件使用者把mx.controls.Label之外类型的值赋给了topRow,编译器会生成一条错误消息。
当创建模版组件时应该使用[InstanceType]元数据标签,更多信息,请阅读模版组件。
[InstanceType]元数据标签用法如下:
[InstanceType("package.className")]
你必须指定完全限定的包和类名。
NonCommittingChangeEvent元数据标签
[NonCommittingChangeEvent]元数据标签把一个事件指定为临时触发器,也就是说该事件不应该调用Flex在该属性上的数据验证。你把该标签用在可能经常改变值而又不必每次改变都要验证的属性上。
一个例子是假如你为一个TextInput控件的text属性指定了一个验证,每次按下键,text属性值都会改变,但是在用户按下Enter键之前或焦点离开该控件之前你都不想进行验证,NonCommittingChangeEvent标签允许你广播一个change事件,但它不会触发验证。
[NonCommittingChangeEvent]标签应该插入到ActionScript的属性定义或者setter/getter方法之前。其用法如下:
[NonCommittingChangeEvent("event_name")]
在下面的例子中,每次用户按键,组件都会广播一个change事件,但是这个事件并不会触发数据绑定或数据验证。当用户按下了Enter键后,组件广播一个valueCommit事件来触发数据绑定或数据验证:
[Event(name="change", type="flash.events.Event")]
class MyText extends UIComponent {
...
[Bindable(event="valueCommit")]
[NonCommittingChangeEvent("change")]
function get text():String {
return getText();
}
function set text(t):void {
setText(t);
// Dispatch events.
}
}
RemoteClass元数据标签
使用[RemoteClass]元数据标签向Flex注册这个类,这样当使用Action Message Format(AMF)序列化该类的实例时,Flex就会保留这个类的类型信息。[RemoteClass]标签要插入到类定义之前。其用法如下:
[RemoteClass]
在客户端程序中你也可以使用该标签表示一个服务器端Java对象。你使用[RemoteClass(alias=" ")]元数据标签创建一个直接映射到Java对象的ActionScript对象。你要用alias的值指定Java对象的完全限定类名。更多信息请阅读使用Flex访问服务器端数据。
Style元数据标签
使用[Style]标签定义组件定义组件的MXML标签样式属性。[Style]标签要插入到ActionScript类定义之前,或MXML文件中的<mx:Metadata>块内,其用法如下:
[Style(name="style_name"[,property="value",...])]
下表描述了[Style]元数据标签的属性:
选项 类型 描述
name
String (必须) 指定样式名称。
type
String 指定样式属性值的数据类型。如果类型不是一个像Number、Date这样的ActionScript类型,就要使用 packageName.className。
arrayType
String 如果type是Array,那么arrayType指定Array元素的数据类型。如果类型不是一个像Number、Date这样的ActionScript类型,就要使用 packageName.className。
format
String 指定属性单元。比如,如果你指定类型为”Number”,你可能指定format=”Length”表示该样式定义像素长度。或者,你指定type=”uint”,设置format=”Color”,表示该样式定义一个RGB颜色。
enumeration
String 指定该样式属性可能的枚举列表值。
inherit
String 指定该属性是否为继承的。有效的值为yes和no。该属性引用CSS继承结构,而非面向对象的继承结构。所有的子类都自动用面向对象的继承从超类继承定义的样式属性。一些样式属性以CSS继承的方式继承样式属性。如果你在父容器上定义了一个可继承的样式属性,它的孩子都会继承该样式属性。比如,如果你把一个Panel容器的fontFamily定义成Times,该容器的所有孩子都会使用Times作为fontFamily,除非它们覆盖了这个属性。如果设置了非可继承的样式,比如在父容器上设置textDecoration,那么只有这个父容器而非它的孩子使用这个样式。更多关于可继承的样式属性的信息,请阅读 关于样式继承。
states
String 对于皮肤属性,你可以使用这个样式指定组件多种状态中的一种状态。例如,Slider.thumbSkin样式的定义使用下面的[Style]元数据标签:[Style(name="thumbSkin", type="Class", inherit="no", states="disabled, down,
over, up")]
这一行说明你可以使用Slider.thumbSkin样式指定Slider控件的disable, down, over, 和 up 的状态。更多信息,请阅读 创建皮肤.
下面的例子演示了textSelectedColor样式属性的定义:
[Style(name="textSelectedColor",type="Number",format="Color",inherit="yes")]
下面的例子演示了verticalAlign样式属性的定义:
[Style(name="verticalAlign", type="String", enumeration="bottom,middle,top", inherit="no")]
更多关于[Style]元数据标签的信息,参见自定义样式属性。
Transient元数据标签
[Transient]元数据标签指定当用[RemoteClass]把ActionScript对象映射到Java对象,把这个对象传输到服务器上时应该忽略掉的属性数据
[Transient]
public var count:Number = 5;
发表评论
-
Flex States 视图状态
2010-08-30 23:06 2195Flex States可以为组件定义多个视图状态,每一 ... -
flex中使用链接报告优化Module大小的测试
2010-08-18 20:51 1711最近使用PuerMVC和Module机制构建了一个界面和操作类 ... -
flex ToolTip专题
2010-06-03 12:46 46881 创建ToolTips 每一个可视化的Flex组件 ... -
pureMVC使用经验和建议
2010-06-03 11:00 1498下面是有经验的朋友分 ... -
pureMVC框架及其开发
2010-06-03 10:46 1189PureMVC框架的目标很明确 ... -
HTML页面加载和解析流程
2010-04-21 11:38 28701.用户输入网址(假设是个html页面,并且是第一次访问),浏 ... -
CSS参考手册
2010-04-21 11:02 914颜色与背景 •color •background-colo ... -
HTML参考手册( 标签、属性和事件)
2010-04-20 17:17 1551HTML标签 标签 描述 DTD <!--...- ... -
flex itemRenderer使用(五):效率
2010-04-17 17:01 1239如果您要显示大量 itemRe ... -
flex itemRenderer使用(四):状态和过渡
2010-04-17 16:01 1787itemRenderer 最擅长与应用程序的用户通信。有时通信 ... -
flex itemRenderer使用(三):通信
2010-04-17 14:51 1610在本系列的第 2 部分中, 我向您展示了如何使用 MXML 和 ... -
flex处理XML(一)基础
2010-04-15 15:24 1343FLEX处理XML,ECMAScript For XML(e4 ... -
flex itemRenderer使用(二)外部渲染器
2010-04-09 18:18 1642在本系列的第 1 部分中, 我向您展示了如何创建内联 item ... -
flex itemRenderer使用(一)内联渲染器
2010-04-09 17:50 1501Flex 提供许多控制, 它们 ... -
Flex Metadata Tag归纳总结
2010-04-01 14:25 1080Flex引入了元数据标签的概念,它告诉编译器如何编译这段 ... -
Flex和JS通信
2010-03-06 18:42 1769flex提供了和JS通信的方法,使用flexSDK中的Exte ... -
最近完成的某系统的报表组件
2010-01-20 21:12 2602最近做完了一个flex+java的项目,其中项目的主要特 ... -
Flex Chart组件的阴影去除
2009-12-21 10:52 2161去除Flex Chart组件的阴影有多种方法,最简单最直接的方 ... -
flex中==和===的区别(和java的==和equals类似但也有不同之处)
2009-12-21 09:44 4758===用于测试两个表达式 ... -
Flex中的Dictionary
2009-12-20 23:04 2500Dictionary 类用于创建属性的动态集合,该集合 ...
相关推荐
metadata-extractor-2.4.0.rar metadata-extractor-2.4.0.rar 获取 图片 exif 信息 使用方法: File jpegFile = new File("c:\\newchangetime.jpg"); Metadata metadata = JpegMetadataReader.readMetadata(jpeg...
在本文中,我们将深入探讨Laravel开发中的"metadata"概念,以及如何在实际项目...通过理解和利用这个"metadata-master"项目,开发者可以进一步提升他们的Laravel技能,从而在项目开发中实现更高级的功能和定制化需求。
`DatabaseMetaData` 是Java数据库连接(JDBC)API的一部分,它提供了关于数据库模式、特性以及元数据的详细信息。本篇文章将深入探讨如何利用`DatabaseMetaData`生成数据库的DLL(在关系型数据库中,DLL通常指的是...
在JDBC高级应用中,我们可以利用其提供的功能实现更高效、更灵活的数据操作。以下是一些关键知识点: 1. **元数据获取**: - `DatabaseMetaData` 类提供了关于数据库的各种元数据信息,例如获取所有表名、列信息、...
在实际应用中,"metadata-extractor-2.8.1"可以用于图像管理、数据分析、地理标记、文件验证等多种场景。它的灵活性和强大的功能使其成为开发人员在处理元数据时的首选工具。只要正确配置并合理使用,这个库可以极大...
"解决Android Studio Gradle Metadata特别慢的问题" Android Studio是Android应用程序开发的官方IDE,它提供了许多功能来帮助开发者快速构建和测试Android应用程序。然而,在使用Android Studio时,有时可能会遇到...
本文将深入探讨FLEX4中的皮肤系统,特别是SparkSkin类,并通过实例展示如何创建和应用自定义皮肤。 1. SparkSkin的介绍: SparkSkin是Flex 4(Gumbo)引入的主要皮肤类,位于`spark.skins`包下。它是一个Group类型...
metadata = ImageMetadataReader.readMetadata(file); for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { String tagName = tag.getTagName(); // 标签名 String...
FLEX 项目的工作空间位于 Document and settings/user directory/adobe flash builder beta2.metadata 和 configuration 目录下。默认情况下,Flash Builder 会把 FLEX 应用程序编译到项目文件夹下面的一个名为“bin...
《metadata-extractor-2.x资源jar包:深入解析与应用》 在Java开发中,处理图像文件时,我们经常需要获取或修改图像的元数据,尤其是对于JPEG格式的图片,其内部包含了丰富的EXIF(Exchangeable Image File Format...
元数据在编译过程中记录了关于源代码的各种信息,比如类型信息、注解、函数签名等,这对于反射和编译时代码生成等高级功能至关重要。 此库作为一个开源项目,意味着它的源代码对公众开放,允许开发者查看、修改和...
赠送jar包:metadata-extractor-2.6.2.jar; 赠送原API文档:metadata-extractor-2.6.2-javadoc.jar; 赠送源代码:metadata-extractor-2.6.2-sources.jar; 赠送Maven依赖信息文件:metadata-extractor-2.6.2.pom;...
《jQuery Metadata插件详解及其应用》 在Web开发领域,jQuery作为一个强大的JavaScript库,极大地简化了DOM操作,事件处理和Ajax交互。而jQuery Metadata插件是jQuery生态系统中的一个重要组件,它提供了一种灵活的...
赠送jar包:metadata-extractor-2.6.2.jar; 赠送原API文档:metadata-extractor-2.6.2-javadoc.jar; 赠送源代码:metadata-extractor-2.6.2-sources.jar; 赠送Maven依赖信息文件:metadata-extractor-2.6.2.pom;...
Flex 基于 Module 模块的开发是一种有效的软件架构策略,它允许将大型应用程序分解为更小、更易于管理的单元,称为模块。模块化的主要目标是提高代码的可维护性、可扩展性和性能。 1. **模块化的定义与原理** - **...
《元数据提取库:metadata-extractor.jar在Java与Android中的应用》 在数字时代,图像文件不仅包含了我们看到的像素信息,还包含了丰富的元数据(Metadata),这些数据提供了关于图片拍摄时间、地点、设备参数等...
Flex是一种用于构建跨浏览器、跨平台的富互联网应用(RIA)的软件框架,它使用Adobe Flash Player或Adobe AIR来呈现界面,并支持多种编程语言,如ActionScript。 ### Flex基础知识 1. **Flex简介**: - Flex是一...
在Flex开发过程中,合理设置编译器参数对于优化应用程序性能、提高代码质量及确保应用的可访问性等方面都至关重要。本文将详细介绍Flex Builder中的编译器参数及其功能,帮助开发者更好地理解和利用这些选项。 ####...
该包只包括应用程序,所依赖的 jar 文件全部取自 $FLINK_HOME/lib。 六、Flink 集群启动 Flink 集群启动命令如下: bin/yarn-session.sh \ --container 5 \ --jobManagerMemory 4096 \ --taskManagerMemory 10240 \...
《jQuery Metadata插件详解及其应用》 在JavaScript的世界里,jQuery库以其易用性和强大的功能深受开发者喜爱。而jQuery Metadata插件是jQuery生态系统中的一个重要组件,它允许开发者从HTML元素中提取元数据...