FLEX: flash-компонент не получает собственное пользовательское событие

#flash #apache-flex #components #swc #dispatchevent

#flash #apache-flex #Компоненты #swc #dispatchevent

Вопрос:

Я создал видеоролик во Flash, который отправляет пользовательское событие: MyEvent.THE_TYPE = «the_type»

в flex у меня есть: <local:my_flash_mc the_type="do_something()"

однако это не работает.

во flash для my event bubbles установлено значение true. во Flash все работает нормально.

в flex я НЕ использую:

 <fx:Metadata>
  [Event(name="the_type", type="...")]  
</fx:Metadata> 
  

… потому что я думаю, что это относится только к пользовательским событиям flex; плюс .swc уже скомпилирован, поэтому нет причин определять класс события в параметре type здесь.

Я попытался создать свойство ‘name’ в моем классе событий, но это не помогло.

есть мысли?

Спасибо

Комментарии:

1. пожалуйста, смотрите: forums.adobe.com/message/3668890#3668890 для подробного объяснения того, как я решил свою проблему… основной проблемой (для меня) были метаданные [EVENT …] … как только я поместил их в свой flash mc, Flex начал распознавать потребность компонента в пользовательском событии (в подсказке кода указано событие).

2. @user689152 Правильный способ ответить на свой собственный вопрос — это ответить на свой собственный вопрос и пометить его как таковой. Несмотря на это, ваше решение (использовать метаданные) не имеет для меня особого смысла. наличие метаданных не должно влиять на то, запускаются события или нет, а вопрос, на который вы ссылаетесь, фокусируется на подсказке кода; в то время как в вашем вопросе здесь утверждается, что событие не запускается. Две очень разные проблемы.

3. извините за это… но stackoverflow не позволил бы мне «ответить» на мой вопрос, по крайней мере, через 8 часов после моего первоначального сообщения… ПОЧЕМУ мой ответ не имеет смысла для вас?? Я не говорил, что у меня возникли проблемы с запуском события… Я сказал, что у меня возникли проблемы с получением события… и без [События … ] метаданные в моем flash-компоненте, плагин flex для flash не может отправить событие в среду flex ( хотя среда flash будет функционировать должным образом)…

4. @user689152 Верно; вы сказали, что у вас возникли проблемы с получением (или прослушиванием) события. Однако ваш ответ не имеет к этому никакого отношения; он относится только к подсказке кода в MXML. И в моем ответе, и в ответе @J_A_X рассказывается, как прослушивать событие в ActionScript без необходимости иметь метаданные на месте.

5. Я упомянул подсказку кода, потому что это показатель того, что flex действительно имеет, по крайней мере, «доступ» к событию. Без этого «доступа» он никогда не смог бы услышать это так или иначе … подсказка кода была эталоном в процессе решения проблемы (для меня).

Ответ №1:

Вы не можете использовать свой MC подобным образом в Flex из-за ограничений между Flash и Flex. Вам придется вручную добавлять прослушиватели событий в ваш MC с помощью ‘addEventListener’.

Ответ №2:

Пожалуйста, определите, что означает «не работает». Я предполагаю, что вы получаете предупреждение компилятора. Этот код:

 <fx:Metadata>
  [Event(name="the_type", type="...")]  
</fx:Metadata> 
  

Сообщает компилятору Flex, что событие существует, и разрешает использовать его в коде, указывающем на MXML. Итак, я предполагаю, что это:

 <local:my_flash_mc the_type="do_something()" />
  

Выдает ошибку компилятора. Это правильно? Решение заключается в добавлении прослушивателя событий в ActionScript:

 my_Flash_MC_Instance.addEventListener('the_type',do_something);
  

В методе обработчика do_something вам нужно будет передать событие (которое не требуется в MXML):

 protected function do_something(event:MyEvent):void{
 // processing here
}
  

Комментарии:

1. «не работает»: flash-компонент получает событие наведения курсора мыши (определено во flash mc… на временной шкале во flash). событие mousedown отправляет пользовательское событие (я могу отследить его из mc: onHandleMyCustomEvent … теперь я его закомментировал, чтобы оно не фиксировало событие). Код, указывающий на flex, не показывает ничего, связанного с моим пользовательским событием. Компилятор flex не выдает ошибку (хотелось бы, чтобы это было так).

2. Я использую подход, который я нашел здесь: tv.adobe.com/watch/under-the-hood-with-adobe /… … он не использует <fx:Метаданные>

3. @user689152 Нет необходимости указывать метаданные для отправки или прослушивания события. Откуда вы знаете, что Flash-компонент получает событие наведения курсора мыши? Вы упомянули временную шкалу, но такая информация была бы недоступна вам при использовании компонента в качестве SWC в приложении Flex. Вы упомянули, что можете отслеживать внутри обработчика. Если это так, событие должно быть запущено.

4. у flash-компонента была трассировка в его собственном обработчике mouse_down … эта трассировка отображалась в консоли в Flex… событие всегда запускалось, но я не мог заставить flex его обнаружить

5. @user689152 Вам придется предоставить нам больше кода, чтобы определить, что не так. То, что вы говорите, кажется неправдоподобным.

Ответ №3:

пожалуйста, смотрите: forums.adobe.com/message/3668890#3668890 для подробного объяснения того, как я решил свою проблему…

основной проблемой для меня был тег метаданных [Event …].

как только я поместил его в свой flash mc, Flex начал распознавать потребность компонента в пользовательском событии (в подсказке кода указано событие).

Комментарии:

1. -1 к этому ответу по причинам, ранее указанным в комментариях к основному вопросу. Flex не нуждается в метаданных для прослушивания событий или их отправки. Метаданные используются только для подсказки кода в IDE (и генерации ASDoc).

2. вы поставили мне -1 за ответ на вопрос? что с вами не так… мой ответ работает… если у вас это не работает, тогда дайте содержательное объяснение несоответствия между вашим собственным решением и моим… но не начинайте давать отрицания… в будущем вы введете в заблуждение людей, которые могут наткнуться на этот пост.

3. Я поставил вам -1 за предоставление ответа, не имеющего отношения к вашему фактическому вопросу. Из моих комментариев к первоначальному вопросу: «наличие метаданных не должно влиять на то, запускаются события или нет, а вопрос, на который вы ссылаетесь, фокусируется на подсказках кода; в то время как в вашем вопросе здесь утверждается, что событие не запускается. Две очень разные проблемы » Метаданные не имеют ничего общего с тем, срабатывает событие или нет; это относится только к подсказке кода.

4. процесс решения часто является эволюционным, извилистым путем… ожидать, что каждое решение будет иметь прямую линейность к исходной проблеме, нереально. ваше -1 вводит в заблуждение будущих читателей… тот факт, что мое решение «не имеет отношения к (моему) актуальному вопросу», объясняется характером самого решения проблемы (и, честно говоря, является субъективным мнением с вашей стороны)…