那么究竟如何为组件定义一个新的事件呢?对于上面的那个例子,可以做如下定义:
//导入类
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);
}
当然,还要用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组件开发做了初步的讨论。在具体的开发时,应根据组件的功能特性非常细致地刻画组件的属性、事件和方法,声明元数据定义良好的用户接口。如果该组件是一个可视的组件还需要为组件制作组件界面的图形元素。
(出处:清风网络学院)
上一篇:Flash MX 2004 ActionScript图文教程
下一篇:Flash MX Professional 2004 V2组件的开发
|