我有一个数据提供者和我的数组的过滤函数,它被分配给我的数据提供者。
如何获取dataprovider(item.data)每行中传递给过滤器函数的属性列表?
例如,如果我的对象包含:
然后我想在我的过滤功能中查看姓名,电子邮件和地址。不幸的是,我不知道这些属性将会是什么。
有什么想法吗?
答案 0 :(得分:53)
如果它是一个动态对象我相信你可以做这样的事情:
var obj:Object; // I'm assuming this is your object
for(var id:String in obj) {
var value:Object = obj[id];
trace(id + " = " + value);
}
这就是它在AS2中的表现,我相信它仍适用于AS3中的动态对象。我认为它将显示的属性更加局限于非动态对象。
答案 1 :(得分:10)
flash.utils.describeType(value:*)
还会为您提供对象的属性列表。
答案 2 :(得分:7)
您可能正在寻找
ObjectUtil.getClassInfo(object)
,见:
http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#getClassInfo%28%29
请注意,它中存在一个错误,导致它将XML视为非动态数据类型。 更多关于bug的信息: bugs.adobe.com/jira/browse/SDK-17712
答案 3 :(得分:6)
for-in仅适用于动态对象。对于类型化对象,您需要使用某种反射来获取属性名称(例如http://www.as3commons.org/as3-commons-reflect/index.html)
/安德烈。
答案 4 :(得分:3)
对我来说只有这个:
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;
}
你得到这样的东西:
obj = m:email@ra..., r:true
答案 5 :(得分: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(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;
}
答案 6 :(得分:1)
你可以使用for ... in循环获取属性名称,或者使用for ... in循环来获取属性值...
for( var o : * in object){
trace( o + " = " + object[o] );
}
/************* OR ******************/
for each( var o : * in object ){
trace( "object has property: " + o );
}
答案 7 :(得分:1)
这也有助于你..
1. for Loop - 将根据指数工作
2.每个 - 递归调用长度
3. for - 用于读取属性值
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
}