Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как узнать, существует ли класс? (http://www.flasher.ru/forum/showthread.php?t=176778)

filepark 17.03.2012 14:28

как узнать, существует ли класс?
 
Я работаю во FlashDevelop и загружаю графику через swc. Положим я не знаю какие там графические объекты (их классы) есть каких нет. Подскажите пожалуйста как узнать есть ли там объекты определенного класса?

КорДум 17.03.2012 14:48

На ум приходит getDefinitionByName() вкупе с try-catch.
Только зачем такое, если Вы используете SWC? В списке доступных классов все будет и так видно.

mayakwd 17.03.2012 15:00

hasDefinition

anmelegov 17.03.2012 15:30

getQualifiedClassName() есть еще такой метод

filepark 17.03.2012 16:30

Спасибо! столько ответов, сейчас попробую.
А нужно это вот для чего: я напишу класс панели, которая состоит из нескольких графических элементов полученных из swc, может быть несколько вариантов приложения, в одних будут использованы все элементы в других лишь некоторые. Соответственно будут приходить разные swc, я же не буду каждый раз править класс этой панели. Сделаю проверку есть элемент, значит добавлю его на панель, нет значит не надо.

nOobCrafter 17.03.2012 17:15

лучше сделать несколько разных классов каждый из которых выполнял именно то что ему надо и использовать каждый по мере надобности, абстрагироваться можно через интерфейс или супер.

filepark 18.03.2012 16:29

Код AS3:

try { 
        var myClass:Class = getDefinitionByName('MySymbol') as Class;
        var mySprite:Sprite = new myClass();
} catch (e:*) {
        trace('класса нет');
}

Код AS3:

if (ApplicationDomain.currentDomain.hasDefinition('MySymbol')) {
        var myClass:Class = ApplicationDomain.currentDomain.getDefinition('MySymbol') as Class;
        var mySprite:Sprite = new myClass();
} else {
        trace('класса нет');
}

у меня не работает, т.к. в обоих случаях ответ есть или нет зависит не от того, определены ли классы в swc, а созданы ли экземпляры этих классов. Если экземпляры нужного класса созданы, тогда и hasDefinition скажет true, и getDefinitionByName найдет, но если экзепляров нет, хотя нужный класс и определен в swc, класс найден не будет.

КорДум 18.03.2012 16:43

Потому что нужно импортировать всю SWC в проект, а не только используемые классы. Как это сделать: по swc в FD пр.кн., выбираем Options.

Добавлено через 44 секунды
К слову, чтобы импорт прошел, можно сделать так: http://www.flasher.ru/forum/blog.php?b=281

filepark 18.03.2012 16:44

Спасибо! :-)

fljot 18.03.2012 16:46

Это потому что сейчас из swc вкомпиливаются только те классы, которые явно используются. Для вкомпиливания всего-всего надо подключать через параметр компилятора "include-libraries".
http://help.adobe.com/en_US/flex/usi...9084-7a92.html


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

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