2012-03-11 4 views
0

私はまだFlexと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オブジェクトが返されます。 objSetsは、オブジェクトであるObjectとしてComboBoxに表示されます。アプリケーションはComboBox#1に動作しているlabsArrayによって読み込まれます。配列からの[0,1,2]の選択に応じて、これはsets配列から一致する位置に配列を呼び出します。

最後に、ComboBox#1を選択すると、2番目のComboBox#2が一致する選択に変わります。

オブジェクトオブジェクトを正しくレンダリングする方法についてのヘルプは、大きな助けになります。また、私の実行がこれを行うための最善の方法ではない場合(リンク/ドキュメント)私も同様に取る。前もって感謝します。

+0

こんにちは@Bungdaddyは、あなたが最初のコンボボックスの選択の変更ハンドラに関連して、コードの多くを提供することができますし、多分MXMLの一部としてもちょうどので、私は得ることができます。これは、これらの線に沿って何かだろうあなたがしようとしているもののより明確な画像、説明はかなり良いですが、もう少し多くのコードで答える方が簡単です。また、上記のforループがあるようですが、スタックオーバーフロー時にテキストエディタにコードをコピー/ペーストし、貼り付けられたコードをすべて強調表示し、テキスト領域の上の{}ボタンを押してください)。 – shaunhusain

答えて

0

あなたが達成しようとしていることの前提に基づいて元のコードを編集しましたが、配列オブジェクトをデータプロバイダに割り当てられたコレクションに直接追加しました。この場合、.toString()オブジェクトクラスの代わりに配列の.toString()は、表示されていた[オブジェクトオブジェクト]を出力します。 Array .toString()メソッドは、配列の各要素に対して.toString()を呼び出し、コンマで区切り、中括弧で囲みます。これは、配列の定義時と非常によく似ています。代わりに、Objectを拡張し、独自のtoStringメソッドを作成してデフォルトの動作をオーバーライドする独自のクラスを作成することもできます。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を使用することで、各項目の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 - これらは2つの可能な答えです。私は何が最高に働くのかを実験する必要があります。詳細な説明をありがとう。さらに、推奨する追加のFlexリソースがある場合は、私は非常に感謝します。私はPhotoshopパネルとのインターフェイスとしてFlexを使用しています。これは急な学習曲線でした。 - ミョウバンもここにいる! – Bungdaddy

+0

@Bungdaddyあなたが私のプロフィールを読んだことに驚いて、私は文字通りちょうどそれを更新しました(バッジのために行っていました...)。私が最初にフレックスを学んだとき、「Flex in a Week」のビデオは、James Ward、Doug McCune、Ted Patrick(ウィキペディアではない、プログラマーはプログラマーではないが、他の人は面白い話もある)、私は多くの人がたくさんの良いものを持っていると確信しています(それらのリンクのどれもがコメントのために長すぎます)。私は自分のサイトでコードを共有していますが、何年も更新されていません。 – shaunhusain

関連する問題