![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2010
Сообщений: 2
|
Добрый день.
Появилась задачка вызвать метод, объявленный в 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, время: 07:11. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|