Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.10.2009, 19:16
Lexa_ вне форума Посмотреть профиль Отправить личное сообщение для Lexa_ Найти все сообщения от Lexa_
  № 1  
Ответить с цитированием
Lexa_

Регистрация: Mar 2009
Сообщений: 33
По умолчанию ModuleLoader => интерфейс => Error #1009

В основном приложении подгружается модуль. Общение с модулем через интерфейс. При создании экземпляра получаю нулевой объект и соответсвенно ошибку 1009.
Интерфейс:
Код AS3:
package ifc
{
    public interface StatusBarIfc
    {
        function logInfo(eventType:String,eventText:String = ""):void;
    }
}
Модуль:
Код AS3:
<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>
Основное приложение:
Код AS3:
<mx:Script>
		<![CDATA[
 			import ifc.StatusBarIfc;
 
 			public var statusIfc:StatusBarIfc;
 
			private function initApp():void
			{
				loadModule(mainStatusbar,"StatusBar.swf");
				statusIfc = mainStatusbar.child as StatusBarIfc;
				statusIfc.logInfo("Start application.");
			}
		]]>
	</mx:Script>

Старый 26.10.2009, 23:07
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну тут сразу много всего одновременно:
Module - это не документ класс модуля, документ класс - это какая-нибудь имплементация IFlexModuleFactory она будет чем-то типа SystemManager для модуля.
В AS3 имена интерфейсов должны начинаться с прописной "I".
Кроме того, я чесно не знаю, и лень разбираться с тем, как именно Флекс грузит модули, есть вариант при котором у вас могут оказаться 2 интерфейса с одинаковыми названиями но в разных ApplicationDomain. В таком случае естественно, нужно будет грузить модули самому и в "правильный" домейн.
__________________
Hell is the possibility of sanity

Старый 27.10.2009, 19:55
Lexa_ вне форума Посмотреть профиль Отправить личное сообщение для Lexa_ Найти все сообщения от Lexa_
  № 3  
Ответить с цитированием
Lexa_

Регистрация: Mar 2009
Сообщений: 33
Я использую ModuleLoader, а IFlexModuleFactory нужен для ModuleManager. В общем сакральный смысл интерфейсов мне постичь не удалось. Пришлось поступить трусливо, обьявить интерфейс расширением IEventDispatcher и общаться с ним через события. Работает, данные передаются, но морального удовлетворения нет. Если кто расскажет как правильно общаться с модулями - буду благодарен. Потому как сам не могу понять. В Flex 3 Cookbook вообще написано
Цитата:
When using an <mx:ModuleLoader> object, the module instance is available from the child property:
а так не работает нифига, даже с примером из этой книги. В общем вот новый код интерфейса и кусок кода приложения:

Код AS3:
package ifc
{
	import flash.events.IEventDispatcher;
	public interface IStatusBar extends IEventDispatcher
	{
		function logInfo(eventType:String,eventText:String = ""):void;
	}
}
Код AS3:
	<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.
Старый 27.10.2009, 22:38
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Я использую ModuleLoader, а IFlexModuleFactory нужен для ModuleManager. В общем сакральный смысл интерфейсов мне постичь не удалось. Пришлось поступить трусливо, обьявить интерфейс расширением IEventDispatcher и общаться с ним через события. Работает, данные передаются, но морального удовлетворения нет. Если кто расскажет как правильно общаться с модулями - буду благодарен. Потому как сам не могу понять. В Flex 3 Cookbook вообще написано
Это типа "слышал звон..." Модуль, как и любое другое флексовое фреймворковское приложение состоит из 2+ кадров. <Module> - это класс фабрика второго кадра, а первый кадр, он же документ класс - это какой-нибудь имплементатор IFlexModuleFactory. Теоретически, вы можете создать свой класс, который заменит систем менеджер вашему модулю. Но практически это и трудозатратно, да и смысла особого не имеет. Вы на самом деле все начинали делать правильно, просто вы не то кастовали (но к правильному интерфейсу). Вы кастовали систем манагер модуля вместо того, чтобы кастовать его класс второго кадра.
__________________
Hell is the possibility of sanity

Старый 28.10.2009, 14:52
Lexa_ вне форума Посмотреть профиль Отправить личное сообщение для Lexa_ Найти все сообщения от Lexa_
  № 5  
Ответить с цитированием
Lexa_

Регистрация: Mar 2009
Сообщений: 33
Пальцем ткнуть можете? Потому как прочитав это я совсем запутался
Цитата:
It loads SWF files and adds modules to the display list of an application. ModuleLoader differs from SWFLoader in that it has a contract that dictates that the SWF file that is loaded implements IFlexModuleFactory. Compiled modules contain the IFlexModuleFactory class factory, which allows an application to dynamically load the modular SWF files at runtime without requiring the class implementations within the main application shell.
Цитата:
When you typecast the values returned from the child property of ModuleLoader or the Object returned from the IFlexModuleFactory.create method to that of the loaded module, you introduce a tight coupling between the module and the loading application.

Старый 28.10.2009, 23:47
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Смотрите, самый простой вариант:
Код AS3:
trace(describeType(mainStatusbar.child));
Сразу развеет все сомнения и подозрения.

Вариант с извращением:
Скомпилировать с -keep и посмотреть, а что именно у вас получилось, когда вы компилировали.
__________________
Hell is the possibility of sanity

Старый 29.10.2009, 15:02
boombooroom вне форума Посмотреть профиль Отправить личное сообщение для boombooroom Найти все сообщения от boombooroom
  № 7  
Ответить с цитированием
boombooroom

Регистрация: Oct 2009
Сообщений: 7
Сам недавно столкнулся с похожей проблемой. Решил ее с помощью события creationComplete у Module. Использовал его непосредственно в mxml модуля. В этот момент все свойства и методы модуля подгружены и их можно спокойно юзать.

Старый 10.11.2009, 17:11
Lexa_ вне форума Посмотреть профиль Отправить личное сообщение для Lexa_ Найти все сообщения от Lexa_
  № 8  
Ответить с цитированием
Lexa_

Регистрация: Mar 2009
Сообщений: 33
Нашел в чем была причина. Компилишь под FP9 - все работает, модули через интерфейсы общаются, фрилав, лигалайз и полное взаимопонимание. Компилишь под FP10 - получаешь Error #1009. Скорее всего глюк в SDK.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.