Пользовательское событие не зафиксировано - почему? - PullRequest
1 голос
/ 16 января 2010

У меня проблема с отправкой пользовательского события, но слушатель не получает его (т.е. myHandler () в приведенном ниже коде). Если я положу все в один файл MXML, это работает. Когда я разделяю обязанности на отдельные занятия, это терпит неудачу. Мне не понятно, чего мне не хватает.

Любая помощь вам будет оценена.

Вот мой код (update () в ViewModel.as является точкой входа):

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? например [Событие (name = "enableChange", type = "ChangeEvent")]

1 Ответ

1 голос
/ 16 января 2010

Необходимо добавить прослушиватель событий для объекта модели (поскольку он отправляет событие).

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...