2011-07-02 8 views
6

¿Puede alguien explicar cuál es la diferencia entre getDefinitionByName y getDefinition en AS3?Diferencia entre getDefinition y getDefinitionByName en AS3

Cuando cargo un SWF externo No puedo usar getDefinitionByName porque me aparece un Error # 1065.

Pero usar externalSWF_ContentLoaderInfo.applicationDomain.getDefinition funciona bien.

Entonces, ¿por qué getDefinitionByName no encuentra el className? Es decir, si la definición está dentro de la aplicaciónDominio del archivo SWF cargado, ¿por qué no está en el archivo SWF principal también? (Estoy usando Flex).

Offtopic: No puedo crear nuevas etiquetas, así que no puedo añadir etiquetas y la getDefinition getDefinitionByName :(

Respuesta

6

getDefinition es un método de una ApplicationDomain que devuelve una definición de una clase, o la función de espacio de nombres .

getDefinitionByName es una función de nivel de paquete de flash.utils que devuelve un objeto de clase que puede utilizar para crear instancias de objetos nuevos. La definición debe estar ya cargado en algún lugar de su ApplicationDomain.

La razón por la que no puede hacer getDefinitionByName con un SWF externo es que se carga en un ApplicationDomain por separado. Su segundo ejemplo funciona porque tiene como objetivo el ApplicationDomain correcto. Para hacer su primer ejemplo funcione debe cargar el SWF externo en su ApplicationDomain actual así:

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); 

Esto funciona porque pasa la ApplicationDomain actual como una propiedad del contexto de la cargadora.

+0

OK, entonces getDefinitionByName() es algún tipo de atajo para ApplicationDomain.currentDomain.getDefinition() en la aplicación principal? – Enrique

+0

En cualquier aplicaciónDominio en el que se encuentre en ese momento, sí. – shanethehat

+0

¿Qué determina en qué dominio de aplicación se encuentra? ¿Es el dominio de aplicación (AD) de la clase que contiene el método que realiza la llamada a getDefinition (es decir, el que se encuentra en la parte superior de la pila de llamadas)? – Triynko