![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 33
|
В основном приложении подгружается модуль. Общение с модулем через интерфейс. При создании экземпляра получаю нулевой объект и соответсвенно ошибку 1009.
Интерфейс: package ifc { public interface StatusBarIfc { function logInfo(eventType:String,eventText:String = ""):void; } } <mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" implements="ifc.StatusBarIfc"> <mx:Script> <![CDATA[ public function logInfo(eventType:String,eventText:String = ""):void { log.htmlText += eventType + eventText + "\r"; } } ]]> </mx:Script> <mx:Text id="log"/> </mx:Module> |
|
|||||
|
Modus ponens
|
Ну тут сразу много всего одновременно:
Module - это не документ класс модуля, документ класс - это какая-нибудь имплементация IFlexModuleFactory она будет чем-то типа SystemManager для модуля. В AS3 имена интерфейсов должны начинаться с прописной "I". Кроме того, я чесно не знаю, и лень разбираться с тем, как именно Флекс грузит модули, есть вариант при котором у вас могут оказаться 2 интерфейса с одинаковыми названиями но в разных ApplicationDomain. В таком случае естественно, нужно будет грузить модули самому и в "правильный" домейн.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 33
|
Я использую ModuleLoader, а IFlexModuleFactory нужен для ModuleManager. В общем сакральный смысл интерфейсов мне постичь не удалось. Пришлось поступить трусливо, обьявить интерфейс расширением IEventDispatcher и общаться с ним через события. Работает, данные передаются, но морального удовлетворения нет. Если кто расскажет как правильно общаться с модулями - буду благодарен. Потому как сам не могу понять. В Flex 3 Cookbook вообще написано
Цитата:
package ifc { import flash.events.IEventDispatcher; public interface IStatusBar extends IEventDispatcher { function logInfo(eventType:String,eventText:String = ""):void; } } <mx:Script> <![CDATA[ public var statusIfc:IStatusBar; private function initApp():void { loadModule(mainStatusbar,"StatusBar.swf"); } public function statusInterface():void { statusIfc = mainStatusbar.child as IStatusBar; } private function connectHandler(event:Event):void { statusIfc.logInfo(event.type); } ]]> </mx:Script> <mx:Canvas> <mx:ModuleLoader id="mainStatusbar" ready="statusInterface()"/> </mx:Canvas> Последний раз редактировалось Lexa_; 27.10.2009 в 19:58. |
|
|||||
|
Modus ponens
|
Цитата:
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Mar 2009
Сообщений: 33
|
Пальцем ткнуть можете?
Потому как прочитав это я совсем запутался ![]() Цитата:
Цитата:
|
|
|||||
|
Modus ponens
|
Смотрите, самый простой вариант:
Сразу развеет все сомнения и подозрения. Вариант с извращением: Скомпилировать с -keep и посмотреть, а что именно у вас получилось, когда вы компилировали.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Oct 2009
Сообщений: 7
|
Сам недавно столкнулся с похожей проблемой. Решил ее с помощью события creationComplete у Module. Использовал его непосредственно в mxml модуля. В этот момент все свойства и методы модуля подгружены и их можно спокойно юзать.
|
|
|||||
|
Регистрация: Mar 2009
Сообщений: 33
|
Нашел в чем была причина. Компилишь под FP9 - все работает, модули через интерфейсы общаются, фрилав, лигалайз и полное взаимопонимание. Компилишь под FP10 - получаешь Error #1009. Скорее всего глюк в SDK.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|