У меня проблема с отправкой пользовательского события, но слушатель не получает его (т.е. 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")]