我遇到一个问题,我发送一个自定义事件,但是监听器没有收到它(即下面代码中的myHandler())。如果我将所有内容放在一个mxml文件中,它就可以了。当我将责任分成不同的类时,它就失败了。我不清楚我错过了什么。
任何帮助你都会受到赞赏。
这是我的代码(ViewModel.as中的update()是入口点):
ChangeEvent.as
import flash.events.Event;
public class ChangeEvent extends Event
{
public function ChangeEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
// Set the new property.
this.isEnabled = isEnabled;
}
// Define static constant.
public static const ENABLE_CHANGED:String = "enableChanged";
// Define a public variable to hold the state of the enable property.
public var isEnabled:Boolean;
// Override the inherited clone() method.
override public function clone():Event {
return new ChangeEvent(type, isEnabled);
}
}
Model.as
public class Model extends EventDispatcher
{
private function TriggerEvent():void
{
var eventObj:ChangeEvent = new ChangeEvent(ChangeEvent.ENABLE_CHANGED);
dispatchEvent(eventObj);
}
}
ViewModel.as
public class ViewModel
{
import mx.controls.Alert;
import ChangeEvent;
private var model:Model;
public function ViewModel()
{
model = new Model();
addEventListener(ChangeEvent.ENABLE_CHANGED, myHandler);
}
public function update():void {
model.LoadData();
}
private function myHandler(event:Event):void {
Alert.show("An event occurred.");
}
}
我是否必须在ViewModel.as中“注册”该事件,类似于mxml中的元数据标签? 例如 [Event(name =“enableChange”,type =“ChangeEvent”)]
答案 0 :(得分:1)
您必须在模型对象上添加事件侦听器(因为它是调度事件的那个)。
model = new Model();
model.addEventListener(ChangeEvent.ENABLE_CHANGED, myHandler);
希望有所帮助。