Расширяет ли базовый класс с ключевым словом [Bindable] метаданные автоматически EventDispatcher?

Я сталкиваюсь с чем-то немного странным, но, возможно, кто-то уже сталкивался с этим раньше.

У меня есть базовый класс, который ничего не расширяет. Назовем это ...

public class FooBar {
    //...
}

Но я хочу связать КАЖДОЕ одно из его открытых свойств:

[Bindable] public class FooBar {
    public var propertyOne:String;
    public var propertyTwo:String;
}

Во время отладки / профилирования класса я замечаю, что каждый раз, когда свойство изменяется - экземпляр FooBar вызывает на нем ".dispatchEvent ()". Но мой класс не расширяет EventDispatcher.

Что дает?

Означает ли это, что во время компиляции мой класс автоматически расширяет EventDispatcher или какой-либо другой класс с возможностью отправки событий? Как я могу прослушивать PropertyChangeEvent, если в моем классе не объявлен метод «addEventListener»?


person bigp    schedule 29.09.2011    source источник
comment
Ни разу этого не замечал, интересно!   -  person Exort    schedule 29.09.2011
comment
Небольшое обновление обнаружения: на самом деле все методы, объявленные в интерфейсе IEventDispatcher, доступны этому классу. Код компилируется нормально, я просто попробовал. Другой разработчик столкнулся с той же таинственной фоновой активностью, выполняя собственные вызовы dispatchEvent () в своем классе Bindable. Технически это означало бы, что нужно объявить только одно свойство или Getter / Setter [Bindable], чтобы класс реализовал IEventDispatcher, а не обязательно весь класс.   -  person bigp    schedule 29.09.2011
comment
А вот источник упомянутого выше разработчика, который тоже нашел это: old. nabble.com/-Bindable--and-dispatchEvent-td13765582.html   -  person bigp    schedule 29.09.2011


Ответы (1)


Когда вы используете [Bindable] метаданные, компилятор Flex генерирует для вас много кода. Если вы хотите точно знать, что происходит, взгляните на ответы на Что означает Тег Flex [Bindable] делать? и ссылки, которые там размещены.

Чтобы ответить на ваш вопрос: нет, ваш класс не расширяет EventDispatcher. Однако компилятор изменяет ваш класс так, чтобы он реализовал интерфейс IEventDispatcher. Сгенерированная реализация этого интерфейса использует экземпляр EventDispatcher.

person Gerhard Schlager    schedule 29.09.2011
comment
Посмотрев на эту ветку old.nabble.com (опубликованную в комментариях к моему вопросу выше), я понял, что интерфейс IEventDispatcher стал моим вторым предположением. Спасибо, что подтвердили это и предоставили некоторые ресурсы :) - person bigp; 29.09.2011
comment
Я просто собираюсь опубликовать это здесь, чтобы исключить некоторые щелчки на случай, если кто-то захочет напрямую просмотреть слайды, объясняя сгенерированный код: slideshare.net/michael.labriola/ - person bigp; 29.09.2011