Adobe flex - тег метаданных события и метод клонирования - PullRequest
2 голосов
/ 22 июля 2011

У меня есть несколько вопросов, связанных с событиями.

Может кто-нибудь объяснить точную необходимость переопределения clone () при создании пользовательских событий? Я прочитал в Flex Cookbook, что нам нужно переопределить clone () на тот случай, если мы захотим повторно отправить это событие. Означает ли это, что когда мы хотим, чтобы событие отображалось в иерархии отображения, отправленное событие должно быть нашим пользовательским клонированным событием, а не объектом Event?

Во-вторых, зачем нужен тег метаданных:

[Событие (name = "modelEvent", type = "com.abc.data.model.ModelEvent")]
открытый класс LoginModel расширяет EventDispatcher {}

Я понимаю, что нам нужно расширить EventDispatcher на тот случай, если мы хотим отправить событие из класса, но в каких случаях мне нужно использовать тег метаданных?

Мой третий вопрос: если я напишу dynamic customEventClass extends Event", могу ли я использовать динамическое ключевое слово для любых целей?

Ответы [ 4 ]

4 голосов
/ 22 июля 2011

1) Событие повторной отправки не совпадает с пузырьком.Скажем, у нас есть какой-то (сторонний) компонент, который отправляет событие без всплывания.И мы хотим делегировать это событие дальше.В этом случае нам нужно повторно отправить событие:

myButton.addEventListener(MouseEvent.CLICK, myButtonClickHandler);

...

private function myButtonClickHandler(event:MouseEvent):void
{
    dispatchEvent(event);
}

В этом случае строка dispatchEvent(event) создает новое событие путем его клонирования.

Если вы уверены, что ваши компоненты с пользовательскими событиями выигралине могут быть использованы другими, вы можете не использовать clone().Но кто знает ... Лучшие практики - это лучшие практики для их следования.

2) Event Метатег решает по крайней мере две практические задачи:

  • Это позволяет компилятору проверять использование соответствующего атрибутав MXML, когда кто-то использует целевой компонент в MXML.Таким образом, компилятор выдаст ошибку без Event объявления метатега, поскольку атрибут события будет неизвестен.
  • Это позволяет IDE использовать завершение кода доступных событий при вводе addEventListener в ActionScript.

3) Ключевое слово dynamic позволяет использовать любые поля с экземпляром, даже если они не объявлены в классе без предупреждения компилятора (но без преимущества завершения кода в среде IDE).В классе событий это позволяет переносить любые пользовательские данные с ним.Очень часто некоторые классы событий объявляют поле data типа Object для этих целей, избегая использования классов dynamic (например, в DataEvent).

0 голосов
/ 23 сентября 2013

Я надеюсь, что Event Bubbling позволяет одному и тому же событию распространяться по иерархии контейнера, но использование метода clone () делает его другим, создавая новый клонированный экземпляр, чтобы повторно отправить его туда, где (Listener) он прослушивается с новым набором. значений конструктора.

0 голосов
/ 22 июля 2011

Я использую события для всего, поэтому считаю полезным хранить события, которые вызвали значительные изменения в модели, чтобы после отмены их можно было отправить снова для поддержки повторного выполнения (т. Е. Если вы отправите то же событие снова,это снова вызовет то же действие).

Я не верю, что в пузырьках используется клон, но исходный код недоступен.

0 голосов
/ 22 июля 2011

секунда - зачем нужен тег метаданных - [Event (name = "modelEvent", type = "com.abc.data.model.ModelEvent")] ... но в каких случаях мне нужно указать метаданные TAg

Тег метаданных используется только для подсказок кода внутри IDE. Если вы хотите, чтобы событие отображалось в MXML-коде, намекающем на ваш компонент, вам нужно добавить тег метаданных события.

Это также может повлиять на подсказку кода ActionScript, когда вы используете addEventLIstener для переменной с типом вашего пользовательского класса, но я этого не проверял.

В MXML вы получите ошибку компилятора, если попытаетесь добавить прослушиватель событий для события без метаданных. Однако ActionScript это позволяет.

Я знаю, что это только половина ответа. С точки зрения события клона; Я рекомендую всегда создавать его, потому что у меня часто возникают ошибки из Flex Framework, если я этого не делаю. Но я не могу точно определить конкретную проблему.

...