{lang: 'de'}
Flashhilfe.de - Flash Community

Typ einer Komponente herausfinden [Flash 9]

 


AntwortenRegistrieren Seite1  

CashFlommunity#1
Benutzerbild von CashFlommunity
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.
Schlagwörter: Komponentenart
badskill#2
Benutzerbild von badskillFlashhilfe.de Moderator
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.
CashFlommunity#3
Benutzerbild von CashFlommunity
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? =)
badskill#4
Benutzerbild von badskillFlashhilfe.de Moderator
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
CashFlommunity#5
Benutzerbild von CashFlommunity
Beiträge: 5
Registriert: May 2010

Themenautor/in

18.05.2010, 15:53

Grandios! Lieben Dank.

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de