Каков наилучший способ связать событие с классом в ActionScript / Flex 3? - PullRequest
2 голосов
/ 16 января 2009

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] в класс с последующими строковыми литералами просто кажется ... неправильным. Заранее спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 17 января 2009

Вы делаете это правильно. В настоящее время компилятор AS3 допускает только строковые литералы в метаданных. Константы не могут быть использованы.

Кстати, в общедоступной базе данных об ошибках Adobe есть запрос функции , позволяющий использовать константы ActionScript в метаданных . Не стесняйтесь голосовать за это.

0 голосов
/ 17 января 2009

Я знаю, я чувствую то же самое; использование строковых литералов кажется немного неправильным. Но, насколько мне известно, из всей документации, которую я видел, и из выступлений, в которых я принимал участие, а также по чтению исходного кода Flex и т. Д., Похоже, что это правильный способ сделать это.

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