Comment getDefinitionByName d'une classe sans emballage dans AS3?
-
05-07-2019 - |
Question
Dites que vous avez un test Flexunit qui ressemble à ceci:
package foo {
import flexunit.framework.TestCase;
import flash.utils.getDefinitionByName;
import flash.utils.getQualifiedSuperclassName;
class DescribeTypeTest {
public function testDescribeInnerType():void {
var currentInstance:ChildBar = new ChildBar();
trace(getDefinitionByName(getQualifiedSuperclassName(currentInstance)));
}
}
}
class Bar{}
class ChildBar extends Bar{}
Qui lève l'exception "Erreur n ° 1065: la barre de variables n'est pas définie." Cela ne s'applique qu'aux classes internes (classes en dehors du package).
Quelqu'un at-il un moyen de faire en sorte que cela fonctionne?
La solution
Je ne sais pas s'il existe une solution de contournement, mais juste pour confirmer:
FonctiongetDefinitionByName ()
fonction publique getDefinitionByName (name: String): Object Version du langage: ActionScript 3.0 Versions d'exécution: AIR 1.0, Flash Joueur 9 Renvoie une référence à la objet de classe de la classe spécifiée par le paramètre name.Paramètres
name: String - Nom d'une classe. Returns Object - Retourne une référence à l'objet de classe de la classe spécifié par le paramètre name.
Lance ReferenceError - Pas de public définition existe avec le spécifié nom.
Etant donné que Bar et ChildBar ne sont pas publics, vous obtenez cette erreur de référence.
Autres conseils
Je viens de tester le code suivant avec Flex 3.3 (application AIR):
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="t();">
<mx:Script>
<![CDATA[
import flash.utils.describeType;
import flash.utils.getQualifiedSuperclassName;
private function t():void {
trace(getDefinitionByName(getQualifiedSuperclassName(new FooBar())));
}
]]>
</mx:Script>
</mx:WindowedApplication>
Bar.as
package
{
public class Bar
{
}
}
FooBar.as
package
{
public class FooBar extends Bar
{
public function FooBar()
{
super();
}
}
}
Comme résultat de trace, je vois:
[SWF] DefTest.swf - 1,024,228 bytes after decompression
[class Bar]
Pouvez-vous confirmer cela? Est-ce que ça aide?