Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Проверка реализации интерфейса (http://www.flasher.ru/forum/showthread.php?t=192938)

Agation 21.01.2013 17:45

Проверка реализации интерфейса
 
Господа, здравствуйте!
Есть одна непонятная ситуация...
По сути: Загружаем swf модуль и проверяем реализовывает ли он интерфейс. Если да, то настраиваем модуль.
Код AS3:

private function setupModule(target:* ):void
{
  if (target is IResultModule)
  {
    //Настройка модуля
  }
}

Предок модуля реализует данный интерфейс и проверка проходит... но не всегда.
В некоторой ситуации получаем false и настройка модуля не происходит. С типом target'а все впорядке.
Данную часть кода переписал, не в лучшую сторону в плане красоты... но работает.
Но в следующем куске кода не проходит проверка на реализацию другого интерфейса, реализованного самим модулем:
Код AS3:

private function onSetupModule(event:ModuleLoaderEvent):void
                        {
                                if (event.module is ISetupModule)
                                {
                                  //Некие манипуляции с модулем
                                }
                        }

Очень мутное поведение flash'а... не знаю уже куда смотреть. Может кто сталкивался с похожей проблемой?

caseyryan 21.01.2013 17:57

Все просто. Смотреть надо в сторону ApplicationDomain.
Грузить нужно флешку в тот же домен, что и у подгружающей
вот выдрал пример кода из своей флешки, в которой происходит то же самое. Тут с loadBytes, но смысл тот же
Код AS3:

 
var byteArray:ByteArray = data as ByteArray; // тут у меня URLLoader'ом грузится swf и полученный байт массив уже Loader'ом загружается       
var loader:Loader= new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderCompele);
if (Security.sandboxType == Security.REMOTE) {
        var context:LoaderContext        = new LoaderContext();
        context.applicationDomain        = new ApplicationDomain(ApplicationDomain.currentDomain);
        loader.loadBytes(byteArray, context);
} else {
        loader.loadBytes(byteArray);
}

Задаем в контексте текущий домен приложения и грузим флешку с указанием контекста

Agation 21.01.2013 19:40

caseyryan, в моём коде ApplicationDomain.currentDomain = null. Сдается мне что это не нормально. Не подскажете как можно это поправить?

Добавлено через 42 минуты
Дело несомненно в applicationDomain! После задания загрузчику модулей
Код AS3:

applicationDomain ={ new ApplicationDomain(ApplicationDomain.currentDomain) } // там все null

проблема стала постоянной!
Осталось придумать что и как положить в ApplicationDomain..

caseyryan 22.01.2013 14:27

Код который я привел точно рабочий. loadBytes можно заменить на load() но суть от этого не поменяется.
У меня с мопощью этого кода грузятся в игру персонажи, которые применяют интерфейс, имеющийся в самой игре. Если Аппликейшн домен не указать то при проверке e.target.content is IMovable вылетит false.
Если указать - true.
Почему у вас null мне не понятно. Надо глянуть хотя бы на минимальный пример того, что там и как происходит

Agation 22.01.2013 15:32

caseyryan, работает все следующим образом:
Запускается главный модуль приложения, из меню выбираем нужную вещицу. Загружается модуль этой вещицы. В некоторых модулях есть записи для просмотра которых нужно подгрузить модуль для данной записи.
Проблема в том что если в двух "больших" модулях, для просмотра записей одинакового типа загрузить модули(сначала в первом "большом" открываем запись, затем во втором), то первый отработает на ура а во втором возникнет проблема с проверками на реализацию интерфейсов... но если тут же открыть запись другого типа, тем самым подгрузив её модуль все отработает на ура.
Для загрузки модулей используется стандартный Module Loader обернутый во ViewStack и NavigatorContent.
В обёртке есть:
Код AS3:

creationPolicy="all"

В главном модуле при инициализации:
Код AS3:

Security.allowDomain("*");

в crossdomain.xml :
Код:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
        <site-control permitted-cross-domain-policies="all"/>
    <allow-access-from domain="*" />
</cross-domain-policy>

С 1111 сообщением! :)


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

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