2009-03-23 8 views
5

Ich habe ein Objekt, das eine Datenbanktabelle darstellt. Ich möchte dieses Objekt durchlaufen und jeden Wert drucken. Was kann ich verwenden, um dies zu tun?flex 3 durchlaufen Objektwerte

ich will das nicht in meinem mxml tun

für jedes Objekt Actionscript-Attribut Ich will ein imput Feld erstellen

Antwort

11

Suchen Sie in der Dokumentation zu Flex 3 looping. Wenn Sie das tun, finden Sie diese:

for..in

Die for..in Schleife durchläuft die Eigenschaften eines Objekts oder die Elemente eines Arrays. Zum Beispiel können Sie eine for..in-Schleife durch die Eigenschaften eines generischen Objekts zu durchlaufen (Objekt-Eigenschaften sind nicht in einer bestimmten Reihenfolge gehalten, so Eigenschaften in einer scheinbar zufälligen Reihenfolge angezeigt):

var myObj:Object = {x:20, y:30}; 
for (var i:String in myObj) 
{ 
    trace(i + ": " + myObj[i]); 
} 
// output: 
// x: 20 
// y: 30 

Anstatt zu versuchen, ein Eingabefeld für jedes Objekt zu erstellen, schlage ich vor, dass Sie sich DataGrid und benutzerdefinierte ItemEditors ansehen.

+2

Wie Kemenaran unten spitz, wenn Sie iterieren Klasse Eigenschaften wünschen, die kanonische Lösung oben funktioniert nicht. Zugegeben, das Iterieren über unbekannte Klasseneigenschaften wäre beim Debuggen am nützlichsten. – Sint

1

Sie können es wie Actionscript schreiben, aber sind sie in der MXML-Datei mit dem Skript-Tag :

<mx:Script> 
    <![CDATA[ 
     public function LoopAndPrint() : void 
     { 
      //your code here 
     } 
    ]]> 
</mx:Script> 
2

Das Problem mit "for ... in" ist, dass es nur auf dynamische Eigenschaften iteriert. Das heißt, wenn Ihr Objekt als eine Klasse (und nicht dynamisch) definiert ist, wird "for..in" nichts geben.

Die Actionscript-Dokumentation vorschlagen describeType() für feste Objekte zu verwenden, aber es sieht zu kompliziert für diese einfache Aufgabe ...

4

Ich bin damit einverstanden, dass diese Antwort nicht nützlich ist. Es funktioniert nur mit generischen Objekten, nicht Benutzer deklariert Objekte.

Hier ist jedoch ein Code, der mit dem oben beschriebenen describeType arbeiten sollte/könnte. (Und ich glaube nicht, dass es zu komplex ist). Beachten Sie, dass nur öffentliche Eigenschaften/Methoden etc. ausgesetzt sind:

var ct:CustomObject = new CustomObject(); 
var xml:XML = describeType(ct); 
for each(var accessor in xml..accessor) { 
    var name:String = [email protected]; 
    var type.String = [email protected]; 
    trace(ct[name]); 
} 
+0

Beachten Sie, dass dieses Beispiel nur * Accessoren * enthält - Attribute, die tatsächlich mithilfe von Getter und Setter definiert werden. Man müsste es leicht modifizieren, wenn man an Variablen, Konstanten oder Methoden interessiert wäre. Weitere Informationen finden Sie in der Dokumentation von describeType (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType \ (\)). –