Flex循环遍历对象

时间:2010-01-28 12:47:25

标签: flex object loops arraycollection

我试图扩展flex ArrayCollection以便能够搜索包含特定数据的对象并将其还原。

这是我的功能:

public function getItemContaining(value: String): Object {                      
          //Loop through the collection         
          for each(var i: Object in this) {                             
            //Loop through fields                               
            for(var j: String in i) {                   
                //If field value is equal to input value
                if(i[j] == value) {
                    return i;

                }
            }
        }
    //If not found
    return null;
    }

问题是j总是为空,所以第二个循环永远不会起作用。所以我读了flex循环描述,实际上它应该工作得很好。可能是什么问题?

3 个答案:

答案 0 :(得分:2)

试试这样:

for (var name:String in myObject){
  trace(name + ":" + myObject[name];
}

好的,你实际上和你一样。错误必须在此行中:

for each(var i: Object in this) {

尝试使用:

for each(var i: Object in this.source) {

答案 1 :(得分:0)

我的第一直觉是看看数据类型。您正在设置一个声明j:String的循环,症状是j始终为空。这告诉我Flex没有将i的元素解释为字符串。如果Flex仅将i的元素识别为对象(因为所有字符串都是对象,而对象是最低的公分母),则它将为j:String返回null。

试试这个内循环:

for(var j: Object in i) {                   
    //If field value is equal to input value
    if(i[j] is String && (i[j] as String) == value) {
        return i;
    }
}

答案 2 :(得分:0)

如果您使用ArrayCollection作为数据源,则应该查看使用IViewCursor接口。您可以提供自定义比较功能,或提供顶部比较的字段。 adobe / livedocs中的示例详细记录了此接口

var _cursor:IViewCursor;
var _idSortField:SortField;
var _idSort:Sort = new Sort();
_idSortField = new SortField();
_idSortField.compareFunction = this.myCompareFunction; 
_idSort.fields = [_idSortField];
myArrayCollection.sort = _idSort;
myArrayCollection.refresh();
_cursor = myArrayCollection.createCursor();
if (_cursor.findAny(search))
   return _cursor;

如果您要搜索特定属性中的值,则更容易。这是adobe livedocs关于此主题的链接