#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 вводит в заблуждение будущих читателей… тот факт, что мое решение «не имеет отношения к (моему) актуальному вопросу», объясняется характером самого решения проблемы (и, честно говоря, является субъективным мнением с вашей стороны)…