2012-03-15 9 views
1

ここで私の質問は、私がこのコードをどのように書いたかを正確に理解しようとしています。これは私が必要とすることをしますが、舞台裏で何が起こっているのか正確にはわかりません。そこにあるActionScript Proは助けてもらえますか?コントロールを動的にActionScriptとアクセスに追加する正しいインスタンス

私がやっていることは、forループを繰り返しながらボタンとデータグリッドを動的に追加することです。このボタンは、visibleプロパティをfalseに設定し、レイアウトからキャンバスを削除することによって、データグリッドを含むキャンバスの表示を制御します。

ボタンと、可視プロパティを設定するイベントリスナーを追加する関数を作成すると、ボタンは正しいキャンバスに関連付けられます。ボタンとイベントリスナーを関数に追加しないと、すべてのボタンがforループに追加された最後のキャンバスを制御します。

これは閉鎖と関係がありますか?以下のコードを参照してください。

この作品:

for(var j:int = 0; j < resultsArray.length; j++) 
{  
    var dataGridCanvas:Canvas = new Canvas(); 
    dataGridCanvas.top = 5; 

    var vboxDatagrid:VBox = new VBox(); 
    var vboxButton:VBox = new VBox(); 

    var resultsAttributeDataGrid:DataGrid = new DataGrid(); 

    vboxButton.addChild(addButtonToCanvas(identifyResults[0], dataGridCanvas)); 

    sidePanel.idResults.vbxIdToolIResults.addChild(vboxButton); 

    var vboxDataGridChild:VBox = new VBox(); 

    vboxDataGridChild.addChild(resultsAttributeDataGrid); 

    vboxDatagrid.addChild(vboxDataGridChild); 

    dataGridCanvas.addChild(vboxDatagrid); 

    idResults.vbxIdToolIResults.addChild(dataGridCanvas); 
} 

private function addButtonToCanvas(layerName:String, theCanvas:Canvas):VBox 
{ 
    var vbox:VBox = new VBox(); 

    var layerButton:spark.components.Button = new spark.components.Button(); 
      layerButton.label = layerName as String; 

      layerButton.addEventListener(MouseEvent.CLICK, 
       function onClick():void{ 
        theCanvas.visible == true ?   theCanvas.visible = false : theCanvas.visible = true; 
        theCanvas.visible == false ? theCanvas.includeInLayout = false : theCanvas.includeInLayout = true 
       }); 

    vbox.addChild(layerButton); 

     return vbox; 
} 

これは動作しませんが、同じことをやっている - ボタンを追加し、それはVBOXにイベントリスナーです:

for(var j:int = 0; j < resultsArray.length; j++) 
{  
    var dataGridCanvas:Canvas = new Canvas(); 
    dataGridCanvas.top = 5; 

    var vboxDatagrid:VBox = new VBox(); 
    var vboxButton:VBox = new VBox(); 

    var resultsAttributeDataGrid:DataGrid = new DataGrid(); 

    var vbox:VBox = new VBox(); 

    var layerButton:spark.components.Button = new spark.components.Button(); 

    layerButton.label = layerName as String; 

    layerButton.addEventListener(MouseEvent.CLICK, 
       function onClick():void{ 
        dataGridCanvas.visible == true ?    dataGridCanvas.visible = false : dataGridCanvas.visible = true; 
        dataGridCanvas.visible == false ? dataGridCanvas.includeInLayout = false : dataGridCanvas.includeInLayout = true 
       }); 

    vbox.addChild(layerButton); 

    sidePanel.idResults.vbxIdToolIResults.addChild(vbox); 

    var vboxDataGridChild:VBox = new VBox(); 

    vboxDataGridChild.addChild(resultsAttributeDataGrid); 

    vboxDatagrid.addChild(vboxDataGridChild); 

    dataGridCanvas.addChild(vboxDatagrid); 

    idResults.vbxIdToolIResults.addChild(dataGridCanvas); 
} 

答えて

0

それはへすべてを持っています閉鎖を行う。

最初の例でCanvasをaddButtonToCanvasに渡すと、クロージャはonClickハンドラに関連付けられたままになります。

関連する問題