2012-03-11 5 views
0

그래서 저는 플렉스와 OOP에서 여전히 머리를 터트려하고 있습니다. 다음은 현재 작업중인 코드입니다.플렉스 - 오브젝트 내의 오브젝트

var labs:ArrayCollection = new ArrayCollection(); 
    var sets:ArrayCollection = new ArrayCollection(); 

    var labsArray:Array = ["ProDPI","WHCC","Tin"]; 
    var setsArray:Array = [ ["Set01","Set02","Set03","Set04"],["Set11","Set12","Set13","Set14"], ["Set21","Set22","Set23","Set24"] ]; 

    var objLab:Object = new Object; 
    objLab.labName = labsArray[0]; 
    objLab.setFolders = undefined; 
    labs.addItem(objLab); 

    for (var i:int = 0; i < setsArray.length; i++) { 
     var objSets:Object = new Object; 
     objSets.setName = setsArray[i]; 
     sets.addItem(objSets); 
     objLab.setFolders = objSets; 
    } 
    labFolderList.labelField="labName"; 
    labFolderList.dataProvider=labs; 

    setFolderList.labelField="setFolders"; 
    setFolderList.dataProvider=sets; 

objLab 개체가 원하는대로 반환됩니다. objSet은 내 ComboBox에 객체로 표시됩니다. 응용 프로그램은 ComboBox # 1이 작동하는 labsArray에 의해 채워집니다. 배열로부터 [0,1,2]의 선택에 따라 이것은 배열에서 일치하는 위치에 배열을 호출합니다.

마지막으로 ComboBox # 1을 선택하면 두 번째 ComboBox # 2가 일치하는 선택 항목으로 변경됩니다.

개체 개체를 올바르게 렌더링하는 방법에 대한 도움이 큰 도움이 될 것입니다. 또한 내 처형이 어떤 방향 (링크/문서)을 수행하는 최선의 방법이 아니라면 내가 취할 것입니다. 미리 감사드립니다.

+0

안녕 @Bungdaddy는 초기 콤보 상자의 선택 변경 핸들러 관련하여 코드의 자세한 내용을 제공 할 수 어쩌면 MXML의 일부뿐만 아니라 너무 나는를 얻을 수 있습니다 : 그것은이 라인을 따라 뭔가 될 것 당신이하려는 것에 대한 더 명확한 그림은 설명이 꽤 좋지만 조금 더 많은 코드로 대답하는 것이 더 쉬울 것입니다. 또한 위의 for 반복문이있는 것으로 보입니다. 스택 오버플로에서 텍스트 편집기에 코드를 복사/붙여 넣은 다음 붙여 넣은 코드를 모두 강조 표시하고 텍스트 영역 위의 {} 버튼을 누르는 것이 가장 좋습니다 (설명이 잘린 것처럼 보입니다).). – shaunhusain

답변

0

내가 수행하려고했던 것에 대한 가정을 기반으로 원래 코드를 편집 했으므로 Array 객체를 dataprovider에 할당 된 컬렉션에 직접 추가했습니다.이 경우 호출 된 .toString() 메서드의 출력이 표시되어야합니다. Object 클래스 대신 Array에서 Object 클래스 .toString()이 표시되는 [object Object]를 출력합니다. Array .toString() 메서드는 배열의 각 요소에 대해 .toString()을 호출하고 쉼표로 구분하고 배열을 정의 할 때와 매우 비슷한 중괄호로 묶습니다. 또는 Object를 확장하고 자신 만의 toString 메서드를 만들어 기본 비헤이비어를 재정의하는 클래스를 만들 수도 있습니다. 일반적으로 Object는 훌륭한 방법이 아닙니다. 예외적으로 어려운 규칙이 아니지만 일반적으로 Object를 사용하는 것이 좋습니다. 특정 클래스 유형 또는 가능한 경우 더 나은 인터페이스).

var labs:ArrayCollection = new ArrayCollection(); 
    var sets:ArrayCollection = new ArrayCollection(); 

    var labsArray:Array = ["ProDPI","WHCC","Tin"]; 
    var setsArray:Array = [ ["Set01","Set02","Set03","Set04"],["Set11","Set12","Set13","Set14"], ["Set21","Set22","Set23","Set24"] ]; 

    var objLab:Object = new Object; 
    objLab.labName = labsArray[0]; 
    objLab.setFolders = undefined; 
    labs.addItem(objLab); 

    for (var i:int = 0; i < setsArray.length; i++) { 
     sets.addItem(setsArray[i]); 
     objLab.setFolders = setsArray[i]; 
    } 
    labFolderList.labelField="labName"; 
    labFolderList.dataProvider=labs; 

    setFolderList.labelField="setFolders"; 
    setFolderList.dataProvider=sets; 

제가 위에서 설명 대신 labelField 및의의 labelFunction를 사용하는 것입니다 각 항목 A의 labelFunction를 사용하여 수업을 제외하고 또 다른 대안 : dataProvider 내의 객체는 사용자 정의의 labelFunction로 전달 될 것입니다 그리고 당신은 반환 할 수 있습니다 문자열은 당신이 적합하다고 보는 논리에 기반합니다.

setFolderList.labelFunction = myLabelFunction; 

    private function myLabelFunction(item:Object):String 
    { 
     var retString:String = ""; 
     for(var i:int=0; i<item.setName.length; i++) 
     { 
      if(i>0) 
       retString += ", "; 
      retString += item.setName[i]; 
     } 
     return retString; 
    } 
+0

감사합니다. @shaunhusain - 이것은 두 가지 가능한 대답입니다. 무엇이 최선을 다할 지 실험 해봐야 할 것입니다. 자세한 설명을 주셔서 감사합니다. 플렉스 리소스를 추가로 추천 해 주시면 감사하겠습니다. 저는 Flex를 Photoshop 패널과의 인터페이스로 사용하고 있습니다. 가파른 학습 곡선이었습니다. - 졸업생 명반 여기도! – Bungdaddy

+0

@Bungdaddy는 차라리 잘될 것입니다. 내 프로필을 읽으면서 놀랍습니다. 문자 그대로 방금 업데이트했습니다. 처음에 플렉스를 배웠을 때 "Flex in a Week"비디오가 최고의 소개 였고 James Ward, Doug McCune, Ted Patrick (위키피디아가 아닌 프로그래머는 프로그래머가 아니었지만 다른 사람도 재미있는 이야기를했습니다.), 나는 다른 많은 사람들이 좋은 물건을 많이 가지고 있다고 확신한다. 수년간 업데이트되지 않았지만 (그리고 완료되지는 않았지만) 내 사이트에서 코드를 공유합니다. – shaunhusain

관련 문제