那么究竟如何为组件定义一个新的事件呢?对于上面的那个例子,能够做如下定义:
//导入类
import mx.core.UIComponent;
//用元数据声明组件事件
[Event("PP")]
[Event("UU")]
//指明该类从UIComponent继承
class T_T extends UIComponent
{
//在编辑环境中已创建两个输入文本(Input Text),并在类中声名其引用。
var T1:TextField;
var T2:TextField;
//定义构造函数
function T_T()
{
//在构造函数中发布T1的change事件
T1.onChanged=function()
{ //创建一个事件对象,存放和事件相关的信息
var eventObj = new Object();
//定义事件类型的名称
eventObj.type = "PP";
//指明事件广播(发生)的对象
eventObj.target = _parent;
//把事件作为组件的事件发布
_parent.dispatchEvent(eventObj);
}
//在构造函数中发布T2的change事件
T2.onChanged=function()
{
var eventObj = new Object();
eventObj.type = "UU";
eventObj.target =_parent;
_parent.dispatchEvent(eventObj);
}
}
}
import mx.core.UIComponent;
//用元数据声明组件事件
[Event("PP")]
[Event("UU")]
//指明该类从UIComponent继承
class T_T extends UIComponent
{
//在编辑环境中已创建两个输入文本(Input Text),并在类中声名其引用。
var T1:TextField;
var T2:TextField;
//定义构造函数
function T_T()
{
//在构造函数中发布T1的change事件
T1.onChanged=function()
{ //创建一个事件对象,存放和事件相关的信息
var eventObj = new Object();
//定义事件类型的名称
eventObj.type = "PP";
//指明事件广播(发生)的对象
eventObj.target = _parent;
//把事件作为组件的事件发布
_parent.dispatchEvent(eventObj);
}
//在构造函数中发布T2的change事件
T2.onChanged=function()
{
var eventObj = new Object();
eventObj.type = "UU";
eventObj.target =_parent;
_parent.dispatchEvent(eventObj);
}
}
}
在以上代码中,先用元数据声明了组件的两个事件UU和PP,然后又在组件类的构造函数中定义T1和T2的change事件,并在他们的change事件中用_parent.dispatchEvent(eventObj);语句把chang事件发布为组件事件。dispatchEvent()方法需要一个Object类型的事件对象作为参数,该对象中保存了和事件相关的信息:target指明事件广播(发生)的对象;type定义了事件类型的名称――也能够认为是事件名称。在事件脚本中使用如下代码就能够对事件做出响应,其使用方法和一般的事件处理方法一致:
//对组件的PP事件做出响应
on(PP)
{ trace("PP"); }
//对组件的UU事件做出响应
on(UU)
{ trace("UU"); }
组件的属性的改变也能够作为事件发布,例如:
private var Tm:String;
//在setter中发布组件的事件
public function set TTm(val:String)
{
Tm=val;
var eventObj = new Object();
eventObj.type = "KK";
eventObj.target =this;
this.dispatchEvent(eventObj);
}
on(PP)
{ trace("PP"); }
//对组件的UU事件做出响应
on(UU)
{ trace("UU"); }
组件的属性的改变也能够作为事件发布,例如:
private var Tm:String;
//在setter中发布组件的事件
public function set TTm(val:String)
{
Tm=val;
var eventObj = new Object();
eventObj.type = "KK";
eventObj.target =this;
this.dispatchEvent(eventObj);
}
当然,还要用Event元数据为组件声明事件。但事实上,没有Event元数据声明的事件组件同样可做出响应。Event元数据声明似乎仅仅是多了一个代码提示而已。所以元数据只是为组件提供了一个更加友好的用户接口,使研发人员更加容易得使用组件。
在发布组件之前,还能够为组定制一个图标。图标大小需要为 18 x 18 像素,并保存为 PNG 格式。他的 Alpha 透明度必须是8位,左上角的像素需要是透明的,以支持遮罩。另外还需要在组件类文档中定义添加元数据声明:
[IconFile("component_name.png")]
该声明和事件声明相同,必须放在类定义之前,使该声明作用到组件类。最后将该图像保存到到FLA文档所在的同一目录中。在导出 SWC 文档时,Flash将在自动包含该图像。
当组件定义完整,测试通过后,就能够发布组件供其他研发人员使用。Flash MX 2004 将组件导出为组件包(SWC 文档)。在发布组件时,只需向其他研发者提供 SWC文档就能够了。此文档包含和组件相关的任何代码、SWF 文档、图像和元数据,因此其他研发者能够方便地将他放到自己的 Flash研发环境中。
这里对Flash V2组件研发做了初步的讨论。在具体的研发时,应根据组件的功能特性很细致地刻画组件的属性、事件和方法,声明元数据定义良好的用户接口。假如该组件是个可视的组件还需要为组件制作组件界面的图像元素。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




