Разница между getDefinition и getDefinitionByName в AS3 - PullRequest
6 голосов
/ 03 июля 2011

Может кто-нибудь объяснить, в чем разница между getDefinitionByName и getDefinition в AS3?

Когда я загружаю внешний SWF, я не могу использовать getDefinitionByName, потому что я получаю ошибку # 1065.

Но использование externalSWF_ContentLoaderInfo.applicationDomain.getDefinition работает нормально.

Итак, почему getDefinitionByName не находит className? Я имею в виду, если определение находится внутри applicationDomain загруженного SWF-файла, то почему его тоже нет в основном SWF-файле? (Я использую Flex).

Оффтоп: я не могу создавать новые теги, поэтому не могу добавить теги getDefinition и getDefinitionByName: (

1 Ответ

6 голосов
/ 03 июля 2011

getDefinition - это метод ApplicationDomain , который возвращает определение класса, пространства имен или функции.

getDefinitionByName - это пакет-уровневая функция из flash.utils , которая возвращает объект Class, который можно использовать для создания новых объектов.Определение должно быть уже загружено где-то в вашем ApplicationDomain.

Причина, по которой вы не можете создать getDefinitionByName с внешним SWF-файлом, заключается в том, что он загружается в отдельный ApplicationDomain.Ваш второй пример работает, потому что вы нацелены на правильный ApplicationDomain.Чтобы ваш первый пример работал, вы должны загрузить внешний SWF-файл в ваш текущий ApplicationDomain следующим образом:

var request:URLRequest = new URLRequest("externalSWF.swf");
var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
var loader:Loader = new Loader();
loader.load(request,context);

Это работает, потому что он передает текущий ApplicationDomain как свойство контекста загрузчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...