2008-12-16 18 views
30

Tengo un proveedor de datos y una función de filtro para mi matriz asignada a mi proveedor de datos.¿Cómo puedo obtener una lista de propiedades en un objeto en Actionscript?

¿Cómo puedo obtener una lista de las propiedades que se encuentran en cada fila del proveedor de datos (elemento.data) cuando se pasa a la función de filtro?

Por ejemplo, si mi objeto contenía:

  • objeto
    • nombre
    • correo electrónico
    • dirección

entonces yo quiero, en mi filterfunction ser capaz de ver el nombre, correo electrónico y dirección. Desafortunadamente, no sé cuáles serán estas propiedades antes de la mano.

¿Alguna idea?

Respuesta

52

Si se trata de un objeto dinámico Creo que sólo puede hacer algo como esto:

var obj:Object; // I'm assuming this is your object 

for(var id:String in obj) { 
    var value:Object = obj[id]; 

    trace(id + " = " + value); 
} 

Así es como se hace en AS2, y creo que todavía funciona para objetos dinámicos en AS3. Creo que las propiedades que mostrará son más limitadas en objetos no dinámicos.

+1

perfecto! Funciona genial. He estado tratando de resolver eso por días. ¡Muchas gracias! G-Man – GeoffreyF67

+0

+1 Incluso AS3 ya no tiene eval, algo así lo hace dinámico. – zawhtut

+1

"Creo que las propiedades que mostrará son más limitadas en objetos no dinámicos". <- Parece que tienes razón sobre esto, parece que un bucle 'for' no pasará por las propiedades definidas estáticamente de una clase. – CamilB

1

se puede utilizar un bucle para .. en obtener los nombres de propiedades, o una para cada uno .. en bucle para obtener los valores de las propiedades ...


for(var o : * in object){ 
    trace(o + " = " + object[o]); 
} 
/************* OR ******************/ 
for each(var o : * in object){ 
    trace("object has property: " + o); 
} 
2
// this method will work for retrieving properties of a *non-dynamic* (typed) object 

// @return - all object properties 
public function getProperties(_obj : *) : Array 
{ 
     var _description : XML = describeType(_obj); 
     var _properties : Array = new Array(); 
     for each (var prop:XML in _description.accessor) 
     { 
       var _property : Object = new Object(); 
       _property.name = String([email protected]); 
       _property.type = String(simple_type([email protected])); 
       _property.access = String([email protected]); 
       _property.declaredBy = String([email protected]); 
       try 
       { 
        _property.value = _obj[_property.name]; 
       } 
       catch (e : Error) 
       { 
        _property.value = ""; 
       } 
       _properties.push(_property) 
     } 
     _properties.sortOn("name"); 
     return _properties; 
} 

// better format for object class information 
private function simple_type(_type : String) : String 
{ 
     var lastIndex : int = _type.lastIndexOf("::"); 
     _type = lastIndex > 0 ? _type.substr(lastIndex + 2) : _type; 
     return _type; 
} 
+1

¿cómo se declara simple_type? – Dave

+1

sí, tienes razón! echa un vistazo a mi edición –

2

para mí era útil sólo esto:

trace('obj = '+getProperties(obj)); 

     public static function getProperties(obj:*):String { 
      var p:*; 
      var res:String = ''; 
      var val:String; 
      var prop:String; 
      for (p in obj) { 
       prop = String(p); 
       if (prop && prop!=='' && prop!==' ') { 
        val = String(obj[p]); 
        if (val.length>10) val = val.substr(0,10)+'...'; 
        res += prop+':'+val+', '; 
       } 
      } 
      res = res.substr(0, res.length-2); 
      return res; 
     } 

y se obtiene así:

obj = m:[email protected], r:true 
+0

Esta me funcionó. Estaba deserializando un JSON de mi aplicación web en un objeto y los otros métodos enumerados aquí no funcionaban (probé todos los demás). ¡Gracias! –

1

Esto también le ayudará a ..
1.para Loop - trabajará en base al índice
2. para cada uno - llamada recursiva hasta la longitud
3. en - se utiliza para leer la propiedad valora

 for(var obj : String in objectData) //here objectData is your object 
    { 
     trace("Object Name Is : " + obj); 
     var data : Object = objectData[obj]; //here we get the object value by using the property name 
     trace("Value Is : " + data); //Converts object to string 
    } 
Cuestiones relacionadas