2010-01-28 6 views
2

플렉스 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는 항상 null입니다 :

여기 내 기능입니다. 그래서 플렉스 루프 설명을 읽고 실제로 잘 작동해야합니다. 무엇이 문제 일 수 있습니까?

답변

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) { 
+0

질문의 구문과 다른가요? –

+0

아니, 네가 맞아! 내 대답을 편집 할 것입니다. – Thomas

0

나의 첫번째 본능은 데이터 유형을 살펴 가지고하는 것입니다. j:String을 선언하는 루프를 설정 중이며 j은 항상 null입니다. 이것은 Flex가 i의 요소를 문자열로 해석하지 못했다는 것을 나에게 암시합니다. Flex가 i의 요소를 Object로 인식하는 경우 (모든 문자열이 Objects이고 Objects가 가장 낮은 공통 분모이므로) 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; 
    } 
} 
0

당신이 당신의 데이터 소스로의 ArrayCollection을 사용하는 경우, 당신은 IViewCursor입니다 인터페이스를 사용하여보고해야한다. 사용자 정의 비교 함수를 제공하거나 비교할 필드를 제공 할 수 있습니다. 이 인터페이스는 물론 어도비/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에 대한 링크입니다.

관련 문제