У меня есть основное приложение, которое содержит ModuleManager
. Это приложение загружает различные модули. Как основное приложение, так и загруженные модули используют мой собственный RSL. Мне нужно получить объект класса в моем RSL, который определен в одном из модулей. Я пытаюсь использовать функцию getDefinitionByName
, но поскольку мой класс не определен в RSL, я получаю исключение (хотя модуль с необходимым классом загружен). Можно ли сделать классы модулей видимыми для кода RSL и получить экземпляр его во время выполнения без изменения структуры проекта? СпасибоgetDefinitionByName() и видимость класса
ответ
Вы можете ввести определение класса, если вы выставляете свойство в модуле (или его интерфейсе) типа Class, аналогично тому, как определения классов вводятся в кнопки для создания значков.
Таким образом, ваш модуль может иметь такой код:
protected var _classToMake:Class;
public function get classToMake():Class {
return _classToMAke;
}
public function set classToMake(value:Class):void {
if (value != _classTomake) {
if (value != null) {
//test to make sure we're making the right thing
var testClass:SomeType = new value() as SomeType;
if (testClass != null) {
_classToMake = value
} else {
trace('classToMake must be a definition that makes a class of SomeType');
}
}
}
}
При загрузке нового модуля, указать домен приложения. Как указано в документе:
"The ApplicationDomain class is a container for discrete groups of class definitions."
Вы указываете домен приложения как часть контекста загрузчика при загрузке SWF.
После того, как у вас есть ссылка на домен приложения, что модуль загружается в, вы можете вызвать getDefinition()
метод домена приложения, чтобы получить определение, во многом таким же образом, как getDefinitionByName()
Также см. Следующий документ «Работа с областями применения» для отличного описания того, как они работают.
http://help.adobe.com/en_US/as3/dev/WSd75bf4610ec9e22f43855da312214da1d8f-8000.html
А вот копия пасты примера, просто упаковывают есть отвлекается:
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
public class ApplicationDomainExample extends Sprite
{
private var ldr:Loader;
public function ApplicationDomainExample()
{
ldr = new Loader();
var req:URLRequest = new URLRequest("Greeter.swf");
var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.load(req, ldrContext);
}
private function completeHandler(event:Event):void
{
var myGreeter:Class = ApplicationDomain.currentDomain.getDefinition("Greeter") as Class;
var myGreeter:Greeter = Greeter(event.target.content);
var message:String = myGreeter.welcome("Tommy");
trace(message); // Hello, Tommy
}
}
}
- 1. Loader.loadBytes и getDefinitionByName
- 2. адресация ребенка из другого класса, созданного getdefinitionbyname
- 3. Странное поведение от getDefinitionByName
- 4. Почему объект возвращается из getDefinitionByName()?
- 5. Видимость членов класса?
- 6. сфера класса variabile видимость
- 7. Видимость переменных внутреннего класса
- 8. getDefinitionByName ("mx.containers.TabNavigator"); не работает
- 9. getDefinitionByName работает с пользовательскими классами?
- 10. AS3 getDefinitionByName - Ошибка # 1065: Переменная {имя класса} не определена
- 11. Экземпляр класса доступа из другой функции - getDefinitionByName (AS3)
- 12. Видимость частного внутреннего класса публичного класса
- 13. Видимость класса статической программы IronPython
- 14. Нечетное поведение getDefinitionByName - не связано с импортом
- 15. AS3 getDefinitionByName не является функцией
- 16. Как изменить видимость члена класса?
- 17. Переопределить метод расширенного класса Видимость
- 18. jQuery удалить предыдущую видимость класса?
- 19. Работа с SWC - проблема getDefinitionByName
- 20. Actionscript 3 getDefinitionByName, не видя классов
- 21. Наследование и видимость членов
- 22. Видимость переменных класса в родительском классе
- 23. настройка Видимость jButton одного класса от другого
- 24. Какова видимость класса по умолчанию в PHP?
- 25. класса видимость в плагин Eclipse-проект
- 26. Видимость класса Eclipse RCP в разных пакетах
- 27. По умолчанию видимость методов класса в PHP
- 28. Переменная видимость внутри метода анонимного класса
- 29. Шаблон видимость псевдонима в вложенного класса
- 30. Как читать область видимости экземпляра класса и видимость
Я думаю, что нужно добавить 'import' заявление в верхней части вашего класса для' getDefinitionByName 'работать. –
@Laurent мой RSL ничего не знает о модулях, я не могу использовать его при компиляции –
Возможно, вы загружаете модули в неправильный домен приложения, чтобы получить доступ с помощью getDefinitionByName из RSL. Было бы разумно, чтобы каждый модуль загружался в уникальный, чтобы избежать столкновений классов. –