actionscript 3 - ¿Cómo puedo obtener una lista de propiedades en un objeto en Actionscript?
actionscript-3 flex3 (8)
Esto también te ayudará ...
1. for Loop - Funcionará según el índice
2. para cada llamada recursiva hasta la longitud
3. para en - usado para leer los valores de la propiedad
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
}
Tengo un proveedor de datos y una función de filtro para mi matriz que está asignada a mi proveedor de datos.
¿Cómo puedo obtener una lista de las propiedades que se encuentran en cada fila del proveedor de datos (elemento.data) a medida que pasa a la función de filtro?
Por ejemplo, si mi objeto contenía:
- Objeto
- nombre
- correo electrónico
- dirección
Entonces, me gustaría, en mi función de filtro, poder ver el nombre, el correo electrónico y la dirección. Desafortunadamente, no sé cuáles serán estas propiedades antes de la mano.
¿Algunas ideas?
Probablemente estés buscando
ObjectUtil.getClassInfo(object)
,ver:
http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#getClassInfo%28%29
Tenga en cuenta que hay un error que hace que trate XML como un tipo de datos no dinámico. Más información sobre el error en: bugs.adobe.com/jira/browse/SDK-17712
Si es un objeto dinámico, creo que puedes 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.
for-in funciona solo para objetos dinámicos. Para los objetos tipeados necesitas usar algún tipo de reflejo para obtener los nombres de las propiedades (ej. http://www.as3commons.org/as3-commons-reflect/index.html )
/ Andrei.
para mí fue útil solo 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 obtienes algo como esto:
obj = m:email@ra..., r:true
puede usar un ciclo for .. in para obtener los nombres de las propiedades, o un para cada .. in loop 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 );
}
flash.utils.describeType(value:*)
también le dará una lista de propiedades en un objeto.
// 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(prop.@name);
_property.type = String(simple_type(prop.@type));
_property.access = String(prop.@access);
_property.declaredBy = String(prop.@declaredBy);
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;
}