自定义事件未被捕获 - 为什么?

时间:2010-01-16 03:25:07

标签: flex events actionscript

我遇到一个问题,我发送一个自定义事件,但是监听器没有收到它(即下面代码中的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”)]     

1 个答案:

答案 0 :(得分:1)

您必须在模型对象上添加事件侦听器(因为它是调度事件的那个)。

model = new Model();
model.addEventListener(ChangeEvent.ENABLE_CHANGED, myHandler);

希望有所帮助。

相关问题