1、创建自定义事件类
自定义事件类继承Event或者Event子类
package com.ms.bookEvent
{
import flash.events.Event;
public class CartEvent extends Event
{
public var isAdd:Boolean;
public var book:Object;
public static const ADD:String = "ADD";
public function CartEvent(type:String,_book:Object,_isAdd:Boolean)
{
isAdd = _isAdd;
book = _book;
super(type);
}
override public function clone():Event
{
return new CartEvent(type,book,isAdd);
}
override public function toString():String
{
return formatToString("CartEvent","book","isAdd");
}
}
}
CartEvent类继承Event,包括isAdd和book两个成员变量.定义一个常量ADD表示事件类型.重写构造方法,将isAdd与book加入进去.创建自定义事件需要重新close和toString方法,重新toString时候可以使用formatToString方法,该方法的第一个参数是自定义事件的事件名称,后面的参数是指成员变量的名称.
2、创建自定义组件分发事件
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
<mx:Style>
.myCheckBox{
color:#ff0000;
}
</mx:Style>
<mx:Script>
<![CDATA[
import com.ms.bookEvent.CartEvent;
protected function addCart(event:MouseEvent):void
{
this.parentApplication.dispatchEvent(new CartEvent(CartEvent.ADD,data,cart_check.selected));
}
]]>
</mx:Script>
<mx:CheckBox click="addCart(event)" x="10" y="0" label="购买" id="cart_check" styleName="myCheckBox" />
</mx:Canvas>
该组件是一个复选框,点击复选框后将分发CartEvent事件,向事件传递参数
3、创建应用监听事件
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="init(event)">
<mx:Script>
<![CDATA[
import com.ms.bookEvent.CartEvent;
import mx.events.FlexEvent;
//
protected function init(event:FlexEvent):void
{
this.addEventListener(CartEvent.ADD,addEventHandler);
}
private function addEventHandler(event:CartEvent):void
{
if(event.isAdd){
this.arrCol.addItem(event.book);
}else{
this.arrCol.removeItemAt(arrCol.getItemIndex(event.book));
}
}
]]>
</mx:Script>
<mx:Model id="books">
<datas>
<book>
<id>0</id>
<name>Flex教程1</name>
<author>董宏伟</author>
<date>2006年</date>
</book>
<book>
<id>1</id>
<name>Flex教程2</name>
<author>董宏伟</author>
<date>2007年</date>
</book>
<book>
<id>2</id>
<name>Flex教程3</name>
<author>董宏伟</author>
<date>2008年</date>
</book>
</datas>
</mx:Model>
<mx:ArrayCollection id="arrCol" />
<mx:VBox width="100%" height="100%">
<mx:DataGrid dataProvider="{books.book}" width="700" height="300">
<mx:columns>
<mx:DataGridColumn headerText="书名" dataField="name" />
<mx:DataGridColumn headerText="作者" dataField="author" />
<mx:DataGridColumn headerText="出版日期" dataField="date" />
<mx:DataGridColumn width="80" textAlign="center" headerText="购买" itemRenderer="com.ms.components.SendEvent" />
</mx:columns>
</mx:DataGrid>
<mx:Text text="您购买的书籍如下所示:" fontSize="12" />
<mx:List width="390" dataProvider="{arrCol}" labelField="name" >
</mx:List>
</mx:VBox>
</mx:Application>
主程序定义一个Model来存放数据,定义一个DataGrid列表显示该数据,DataGrid最后列使用itemRenderer属性渲染指向创建的复选框组件.创建ArrayCollection存放选中的数据,显示在List中.
在主程序初始化的时候执行creationComplete对应的方法,该方法添加对CartEvent事件的监听,当执行该事件的时候就会触发addEventHandler方法中的内容.
该实例主要参考<<Flex3.0程序开发技术详解>>书中的例子,希望对学习这方面的有所帮助.