|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2012
Сообщений: 35
|
getQualifiedClassName не отдает полное имя класса. Что делать?
Ситуация такова.
Есть некая загружаемая через loader swf с библиотекой внутри и пустой сценой. С ее помощью я создаю на сцене в основной флешке всякие разные спрайты. Вот таким образом это происходит: a : Array = getDefinitionNames(DecorationLib.contentLoaderInfo); ... ClassReference:Class = DecorationLib.contentLoaderInfo.applicationDomain.getDefinition(a[index]) as Class; ... de : Sprite = new c(); addChild(de); На практике же при попытке создать объект через getDefinitionByName используя в качестве параметра результат работы getQualifiedClassName для любого объекта созданого из загружаемой флешки не получается. Ловлю сообщение Variable <Имя класса как его дал getQualifiedClassName> is not defined. не работают даже конструкция "В лоб" прямо на сцене. Разбор полетов через describeType привел к осознанию того, что getQualifiedClassName в данном случае возвращает короткое имя класса а не полное. для любого объекта, созданного не через загружаемую флешку возвращается полное имя и нет проблем создать другой такой же объект. А для загружаемых, только короткое имя. Как говорится ну и овощ с ним. Я не гордый, могу к краткому имени и сам руками дописать недостающую часть. Только вот где ее взять то? В принципе я знаю как обойти этот момент. Можно не использовать getDefinitionByName и каждый раз ходить через DecorationLib.contentLoaderInfo.applicationDomain.getDefinition Но тогда нужно дополнительно хранить информацию ( или хитро именовать классы) чтобы из имени класса точно знать, где в DecorationLib ходить, а где напрямую через getDefinitionByName создавать. А если загружаемых библиотек не одна, а несколько то уже как-то неудобно становится. Да и вообще непорядок на мой взгляд. Как это так что через getQualifiedClassName можно узнать имя не всякого класса? Последний раз редактировалось Yahen; 20.01.2012 в 04:08. |
|
|||||
если грузить либу в ApplicationDomain.currentDomain, то getDefinitionByName отдаст класс без проблем
если же в свой домен, то и получать надо через libDomain.getDefinition в-общем не очень понятно в чем трабл |
|
|||||
Регистрация: Jan 2012
Сообщений: 35
|
Трабл в том, что
getQualifiedClassNamе ( для объектов построенных по defenition из загруженной либы) - возвращает кототкое имя а не длинное. И нет никакой возможности не обладая дополнительно сохраняемой информацией ( откуда был взят образец) создать еще один экземпляр класса, от значения getQualifiedClassNamе. |
|
|||||
если грузить в ApplicationDomain.currentDomain, то дополнительная информация не нужна
public function Main():void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete); loader.load(new URLRequest("lib.swf"), new LoaderContext(false, ApplicationDomain.currentDomain)); } private function loader_complete(e:Event):void { var loaderInfo:LoaderInfo = e.target as LoaderInfo; var arr:Array = getDefinitionNames(loaderInfo); var ref1:Class = loaderInfo.applicationDomain.getDefinition(arr[0]) as Class; var obj:Sprite = Sprite(new ref1()); var className:String = getQualifiedClassName(obj); var ref2:Class = getDefinitionByName(className) as Class; addChild(new ref2()); } |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
А в либе как созданы классы с пакетом?
|
|
|||||
Регистрация: Jan 2012
Сообщений: 35
|
Цитата:
Пока я решил вопрос путем указания хитрых имен классов в загружаемых либах. И на основе имени класса я определяю откуда брать getDefinition и брать ли вообще. В принципе не страшно. Но сам факт, что getQualifiedClassName не дает всей информации для того, чтобы создать класс.... |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
У всех getQualifiedClassName работает как надо, а у вас почему-то нет. Соберите пример, что ли.
|
|
|||||
Регистрация: Jan 2012
Сообщений: 35
|
Пример я написал в самом первом сообщении.
Для встроенного объекта getQualifiedClassName отдает полный путь Для загруженного объекта getQualifiedClassName отдает полный путь Для объекта сделанного из образца загруженного через getDefinition отдает только имя класса. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Значит у него нет пакета вообще. Если у него есть пакет, но getQualifiedClassName возвращает только имя класса, тогда соберите простенький пример, описывающий такой баг.
Иначе это где-то ошибка в вашем коде. |
|
|||||
Регистрация: Jan 2012
Сообщений: 35
|
Я так понимаю, что пакета у него нет. У прототипа есть, а у него уже нет. Нет, как говорится и нет, не почему этот вопрос нигде в документации не поднимается?
|
Часовой пояс GMT +4, время: 08:08. |
|
« Предыдущая тема | Следующая тема » |
|
|