2009-08-28 4 views
1

Как получить доступ к элементам Библиотеки из классов, отличных от класса документа?AS3 - Доступ к библиотечным элементам за пределами класса документа

Например, если я создаю клип в Flash, и экспортировать его для Actionscript с именем Foo, я могу сделать это в классе документа:

var f = new Foo(); 
this.addChild(f); 

И он появляется на сцене, как это должен. Но мне нужно иметь возможность создавать другие экземпляры этого объекта из других классов. Если я использую тот же код выше в SomeOtherClass.as, я ничего не получаю на сцене, очевидно, потому что этот класс не знает о объекте Foo в библиотеке.

Я знаю, что мне, вероятно, нужно как-то использовать appplicationDomain.getDefinition. Это не работает:

var a = new ApplicationDomain(ApplicationDomain.currentDomain); 
var foo: Class = a.getDefinition ("com.me.CustomClass") ; 
var f = new foo() ; 
addChild (f) ; 

TypeError: Error # 1007: Предпринята попытка не-конструктор.

ответ

0

Я никогда не помню, чтобы это было проблемой. Я думаю, что это было какое-то время!), Что вам нужно написать класс кода, полученный из MovieClip или аналогичный, и связать его с элементом библиотеки где-нибудь в его свойствах. Конечно, как только это будет сделано, вы можете рассматривать классы библиотеки так же, как и любой другой класс.

EDIT:

попробовать это:

var foo:Class=loaderInstance.contentLoaderInfo.applicationDomain.getDefinition("MyClass"); 
var x:*=new foo(); 

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

+0

Да, ваш код работает, если вызван в загрузчике, но в этом случае я могу получить доступ к библиотеке в любом случае, не используя applicationDomain. Я хотел бы знать, как использовать тот же тип вызова, но внутри «loadee» (вторичный загруженный swf). – 2009-08-28 04:16:49

0

Попробуйте что-то больше, как это:

var foo:Class = ApplicationDomain.currentDomain.getDefinition("SymbolName") as Class; 

Я считаю, имя символа не должен иметь имя пакета в начале, для символа библиотеки.

+0

ReferenceError: Ошибка # 1065: переменная CustomClass не определена. Я пытаюсь получить доступ к библиотеке из вторичного swf, который был загружен. Мне нужно получить доступ к библиотеке родительского swf. – 2009-08-28 03:58:05

1

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

Вы должны предоставить загруженный swf-доступ к библиотеке swf загрузчика. Попробуйте использовать LoaderContext.

Off верхней части моей головы:

var loader:Loader = new Loader(); 
var ctx:LoaderContext = new LoaderContext(false,ApplicationDomain.current); 
loader.load(yourRequest,ctx); 
+0

Если я использую ваше предложение в загрузчике, какой код должен был бы создать экземпляр объекта из основной библиотеки, вызванный из другого класса, который скомпилирован с помощью дочернего swf? – 2009-08-28 04:52:59

+0

попробуйте следующее: var clazz: Class = loaderInfo.applicationDomain.getDefinition ("ClassName") как класс; var instance: ClassName = new clazz(); –

0

Я нахожу эти ответы несколько более-вареные, потому что все, что я когда-либо делал, чтобы использовать библиотечный объект из любого класса импортировать его как любой стандартный импорт , Конечно, именно поэтому мы выбираем Export for Actionscript.

Например:

package 
{ 
    import foo;      // Library MovieClip 
    import flash.display.MovieClip; // Must import MovieClip to Extend it. 
    ....... 

    public class something extends MovieClip 
    { 
    private var _foo:foo; // Create a local reference of the imported Library Item. 
    ...... 

    public function something():void 
    { 
    _foo = new foo(); // Create a new instance of the imported Library Item. 
    ......... 
    } 
    } 
    } 

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

+0

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

Смежные вопросы