|
|
|||||
Регистрация: Jun 2010
Сообщений: 2
|
Вызов Flex из Flash
Добрый день.
Появилась задачка вызвать метод, объявленный в Flex из Flash. Например: Flex-часть (метод, который должен вызываться выделен): <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx"> <fx:Script> <![CDATA[ public function callMe():void { trace("callMe"); } ]]> </fx:Script> <fx:Declarations> </fx:Declarations> </s:Application> var loader:URLLoader = new URLLoader(); ... loader.load("FlexPart.swf"); ... loader.content.callMe(); ReferenceError: Error #1069: Не удалось найти свойство callMe в _FlexPart_mx_managers_SystemManager; отсутствует значение по умолчанию. Спасибо. Добавлено через 30 минут Еще подебажил и нашел, что loader.content - какой-то странный автогенеренный класс с аналогичным ISystemManager интерфейсом. Однако каст вида: падает с ошибкой: TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать _FlexPart_mx_managers_SystemManager@3a9825c1 в mx.managers.ISystemManager. Но это ладно, ну ее, эту иерархию, всегда можно сделать: что удивительно, оно заработало, но только после того, что этот вызов я засунул в setTimeout(5000), т.к. при получении Event.COMPLETE от loader собственный загрузчик внутри Flex-SWF начинает прогружать контент, и в это время . Собственно отсюда три вопроса: 1) Как заставить чистый Flash увидеть класс ISystemManager? Нужно подключить к нему Flex-либы? - хотя возможно это не принципиально, все равно ведь лезу через Object(...) 2) Можно ли сделать так, что каст работал корректно, и я смог лезть в объект аккуратно через интерфейс ISystemManager? 3) Есть ли какой-то ивент на Flex-приложении, который диспатчится когда внутренний Flex-загрузчик заканчивает свою работу (собственно чтобы избавиться от setTimeout)? Спасибо. |
|
|||||
Регистрация: Jul 2010
Сообщений: 4
|
Как-то так
loader.content.application.callMe() http://help.adobe.com/en_US/flex/usi...19ab-7fe4.html Добавлено через 3 минуты Цитата:
Когда понадобилось, делал так: в загружаемом приложении делал в createContents FlexGlobals.topLevelApplication.swfLoaded(), где swfLoaded(), метод загружающего приложения Последний раз редактировалось zikas; 29.07.2010 в 16:09. |
Часовой пояс GMT +4, время: 10:17. |
|
« Предыдущая тема | Следующая тема » |
|
|