ActionScript 3 / Flex 3 - добавление настраиваемых событий в класс
Скажем, у меня есть следующее событие:
import flash.events.Event;
public class SomeEvent extends Event
{
public static const EVENT_ACTION:String = "eventAction";
public function SomeEvent(type:String) {
super(type);
}
override public function clone():Event {
return new SomeEvent(this.type);
}
}
... и следующий класс:
public class SomeClass extends EventDispatcher
{
public function someFunction():void
{
dispatchEvent(new SomeEvent("eventAction"));
}
}
Как лучше всего показать, что SomeClass выбрасывает SomeEvent? Единственный способ, который я нашел, - это украсить SomeClass атрибутом [Event] следующим образом:
[Event (name = "eventAction", type = "SomeEvent")]
Это позволяет мне создать экземпляр класса и добавить прослушиватель событий, выполнив следующие действия:
var someClassInstance:SomeClass = new SomeClass();
someClassInstance.addEventListener(SomeEvent.EVENT_ACTION, mycallbackmethod);
Есть лучший способ это сделать? Помещение атрибута [Event] в класс, за которым следуют некоторые строковые литералы, кажется ... неправильным. Заранее спасибо за помощь!





Я знаю, я чувствую то же самое; использование строковых литералов почему-то кажется немного неправильным. Но насколько мне известно, из всей документации, которую я видел, и из бесед, которые я посетил, из чтения исходного кода Flex и т. д., Кажется, что это правильный способ сделать это.
Ты делаешь это правильно. В настоящее время компилятор AS3 допускает только строковые литералы в метаданных. Константы использовать нельзя.
Кстати, в общедоступной базе данных об ошибках Adobe есть запрос функции, позволяющий использовать константы ActionScript в метаданных. Не стесняйтесь голосовать за это.