Typ einer Komponente herausfinden [Flash 9]
| Beiträge: 5 Registriert: May 2010
| 18.05.2010, 08:37
Guten Morgen,
wie kann ich den Typ einer instanziierten Komponente (wie TextInput, Textarea) herausfinden oder feststellen dass es eine Komponente ist?
Bei typeof erhalte ich stets Object. Eine Eigenschaft wie type bei den Komponenten scheint es nicht zu geben.
Leider habe ich eine Antwort auf diese einfache Frage beim Suchen nicht bekommen. | | | Beiträge: 5285 Wohnort: Bernau (bei
Berlin) Registriert: Nov 2002
| 18.05.2010, 10:02
Hi,
wozu brauchst du das denn? Vielleicht gibt es ja noch einen einfacheren/besseren Weg. | | | Beiträge: 5 Registriert: May 2010
Themenautor/in
| 18.05.2010, 10:22
Ich habe mir einen kleinen Designmanager gebaut, der Elemente per DragDrop verschieben lässt. Ist so eine Klasse von Greensock. Da kann ich jeden MC, Textfeld usw. per Methode hinzufügen und dann ist das dragdrop-fähig.
Deshalb gehe ich in der Schleife alle Elemente durch. Bei Gruppen gehe ich deren Unterelemente durch bis immer nur eine Sache übrig bleibt (z.B. MC mit 3 Elementen -> in jedem der drei ein MC => füge die drei MCs einzeln hinzu).
Bei Komponenten möchte ich aber nicht deren Unterelemente hinzufügen (z.B. Scroller, Textfeld) sondern als ganzes, deshalb will ich vorher abfragen ob das eine Komponente ist, die ich dann als ganzes hinzufüge.
Verstehst? =) | | | Beiträge: 5285 Wohnort: Bernau (bei
Berlin) Registriert: Nov 2002
| 18.05.2010, 11:28
Ich habs mal ein wenig durchgetestet. Leider gibt es dafür in AS2 scheinbar keinen einfachen Mechanismus.
Habe aber zwei Möglichkeiten erarbeitet, bei denen das gehen sollte.
1. Da jede Komponente von UIObject erbt, kann man die Prototypen-Kette hochhangeln und überprüfen, ob die aktuelle proto-Eigenschaft mit der prototype-Eigenschaft von UIObject übereinstimmt.
ActionScript:1 2 3 4 5 6 7 8 9 | import mx.core.UIObject;
function isComponent(o:Object):Boolean {
while (o.__proto__) {
if (UIObject.prototype == o.__proto__) return true;
o = o.__proto__;
}
return false;
}
trace(isComponent(instanzname));
|
Eine andere, einfachere aber auch u.U. unsichere Möglichkeit ist die Überprüfung von eventuell vorhandenen Methoden des Objektes.
Jede Komponente erbt von UIObject einen speziellen Satz an Methoden.
ActionScript:1 2 3 4 | function isComponent(o:Object):Boolean {
return typeof(o["doLater"]) == "function";
}
trace(isComponent(instanzname));
|
In dem Beispiel habe ich jetzt die doLater-Methode genommen. Der Nachteil daran ist aber, dass man Objekte überprüft, die zwar keine Flash-Komponenten sind, aber dennoch diese Methoden implementiert haben könnten. Von daher muss man mit dem zweiten Beispiel etwas vorsichtig sein.
++++++ Update ++++++
Manchmal ist die einfachste Lösung doch so nah :)
ActionScript:1 2 | import mx.core.UIObject;
trace(instanzname instanceof UIObject);
|
| Geändert von badskill am 18.05.10 um 11:51 Uhr | |
| | Beiträge: 5 Registriert: May 2010
Themenautor/in
| 18.05.2010, 15:53
Grandios! Lieben Dank. | |
| Ähnliche Beiträge zum Thema | |
|
Flashhilfe.de Flash Platform Tipps & Tutorials Flash Platform Andere Programmiersprachen Jobangebote Diskussionen
Flashhilfe News
Regeln & Bedingungen
|