Вам не нужно создавать новый класс сигналов для командных карт, это просто хорошая практика. Вы можете просто дать классу «dataType» свойство типа - и сделать для этого switch
. Но это было бы грязно для команд. Но обратите внимание, команды в основном предназначены для запуска действий всего приложения.
Не все сигналы запускают действия всего приложения.
Например, если вы отвечаете на кучу событий из одного View
. Я предлагаю создать класс Signal
для связанных «событий просмотра» (например, MyButtonSignal
для MyButtonView
) и присвоить ему свойство типа.
Типичный мой сигнал будет выглядеть так:
package {
public class MyButtonSignal extends Signal {
public static const CLICK:String = 'myButtonClick';
public static const OVER:String = 'myButtonOver';
public function MyButtonSignal() {
super(String, Object);
}
}
}
Отправка вроде так
myButtonSignal.dispatch(MyButtonSignal.CLICK, {name:'exit'});
Слушай как обычно:
myButtonSignal.add(doMyButtonSignal);
Обрабатывать сигнал так:
protected function doMyButtonSignal(type:String, params:Object):void {
switch(type) {
case MyButtonSignal.CLICK: trace('click', params.name);
break;
case MyButtonSignal.OVER: trace('OVER', params.name);
break;
}
}
Иногда полезно присвоить переменной data
собственный класс данных.
Таким образом, каждый раз, когда вы понимаете: «Черт, мне нужно реагировать на другое событие», вы просто переходите к Signal
и добавляете новый статический констант для представления события. Так же, как вы (вероятно?), Когда использовали Event
объекты.