我希望舞台在每次对某些对象进行某些更改时做出反应。有没有办法编写自定义事件?我当然可以修改这个对象,但我想知道是否还有OOP
方法可以做到这一点。事件是OOP
,不是吗?
答案 0 :(得分:2)
自定义事件类可以这样写:
public class MyEvent extends Event
{
private var evtData:Object;
public function MyEvent(type:String, data:Object)
{
super(type);
//fill this.evtData here
}
override public function clone():Event
{
return new MyEvent(type, evtData);
}
}
然后通过以下方式发送此事件:
dispatch(new MyEvent("someName", obj))
并像
一样抓住它myObj.addEventListener("someName", handleMyEvent);
function handleMyEvent(evt:MyEvent):void
{
//do something with evt
}
答案 1 :(得分:1)
假设您在某些课程中拥有属性count
。最简单的方法是为此属性生成setter和getter,并在setter内部调度一些自定义事件。
protected var _count:Number;
public function get count():Number
{
return _count;
}
public function set count(value:Number):void
{
_count = value;
dispatchEvent(new CountEvent(CountEvent.COUNT_CHANGED, value, true));
}
这是自定义事件类:
public class CountEvent extends Event
{
public static const COUNT_CHANGED:String = "countChanged";
public var data:Object;
public function CountEvent(type:String, data:Object, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.data = data;
}
override public function clone():Event
{
return new CountEvent(type, data, bubbles, cancelable);
}
}
请注意,如果您需要属性的值并且没有对象本身的引用,则可以创建数据对象事件。为了使这种自定义事件正常工作,您需要覆盖克隆方法,每次重新分派事件时都会使用该方法。
如果您正在寻找更高级的“观察”方法,可以使用一些自定义代码,例如: http://code.google.com/p/flit/source/browse/trunk/flit/src/obecto/utility/observe/Observe.as?r=190
无论哪种方式,您都必须通过添加调度程序(如果您的类不是 EventDispatcher 子类)来决定是否要修改您的类,并调度事件或使用其他一些技术。另一种方法是创建属性[Bindable]
并使用属性和某个函数之间的绑定来监视是否有更改。