2009-03-23 16 views
5

tengo un objeto que representa una tabla de base de datos. Quiero iterar a través de este objeto e imprimir imprimiendo cada valor. ¿Qué puedo usar para hacer esto?flex 3 iterar a través de valores de objeto

Quiero hacer esto dentro de mi mxml no actionscript

para cada atributo de objeto que quiero crear un campo llave de entrada

Respuesta

11

Busque la documentación en Flex 3 looping. Si lo hace, se encuentra esta:

for..in

Los for..in iteración de bucle a través de las propiedades de un objeto o los elementos de una matriz. Por ejemplo, se puede utilizar un bucle for..in para iterar a través de las propiedades de un objeto genérico (propiedades de objeto no se mantienen en un orden particular, por lo que las propiedades pueden aparecer en un orden aparentemente aleatorio):

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

En lugar de intentar crear un campo de entrada para cada objeto, le sugiero que eche un vistazo a DataGrid y ItemEditors personalizado.

+2

Como Kemenaran punta, si desea iterar sobre las propiedades de clase, la solución canónica anterior no funciona. De acuerdo, iterar sobre las propiedades de clase desconocidas sería más útil cuando se depura. – Sint

1

Puede escribirlo como ActionScript, pero incluirlo dentro del archivo mxml con la etiqueta script :

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

El problema con "para ... en" es que itera solo en propiedades dinámicas. Es decir, si su objeto se define como una clase (y no dinámicamente), "for..in" no dará nada.

La documentación de ActionScript sugieren utilizar describeType() para propiedades fijas, pero parece demasiado complicado para esta tarea simple ...

4

Estoy de acuerdo que esta respuesta no es útil. Solo funciona con objetos genéricos, no objetos declarados por el usuario .

Sin embargo, aquí hay un código que debería/podría funcionar utilizando describeType como se sugirió anteriormente. (Y realmente no creo que sea demasiado complejo). Tenga en cuenta que las propiedades/métodos sólo públicos, etc. están expuestos:

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

Tenga en cuenta que este ejemplo solo incluye * accessors * - atributos que en realidad se definen utilizando getters y setters. Uno necesitaría modificarlo ligeramente si uno estuviera interesado en variables, constantes o métodos. Consulte [la documentación de describeType] (http: //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html#describeType \ (\)) para obtener información más específica. –

Cuestiones relacionadas