getChildbyName
cherche des enfants dans la liste d'affichage, pas des variables membres. On dirait que vous essayez de l'utiliser pour la réflexion, ce qui n'est pas le cas.
Qu'essayez-vous réellement d'accomplir ici? S'il est juste d'avoir un moyen de construire un type basé sur la chaîne alors que vous pourriez faire une déclaration simple interrupteur:
// Assuming all *Slide objects implement ISlide
private function buildSlide(type:String):ISlide {
switch (type) {
case "Foto":
return new FotoSlide();
case "Text":
return new TextSlide();
// ...
}
}
var data:Object = _dataProvider[0];
trace(data.type);//This gives back the string Foto
var slide:Sprite = this.builderSlide(data.type);
addChild(slide);
Ou, créez un hachage avec des fonctions qui renvoient un nouvel élément de ce type. Par exemple:
private var builders:Object = {
"Foto" : function() { return new FotoSlide(); },
"Text": function() { return new TextSlide(); },
// ...
};
var data:Object = _dataProvider[0];
trace(data.type);//This gives back the string Foto
var slide:Sprite = this.builders[data.type]();
addChild(slide);
Vous pouvez faire une validation de la valeur data.type
pour vous assurer qu'il est un type prévu, selon la façon dont vous beaucoup confiance à la source de données.
Le premier est un peu plus sûr, mais les deux devraient fonctionner.
Je suis assez certain que ne fonctionne toujours pas. 'FotoSlide' n'est pas un enfant de la liste d'affichage de la classe, ni même une classe enfant. La variable 'fotoSlide' existe, mais cela ne crée pas de correspondance réelle que' getChildByName' pourrait utiliser. – Herms