ここで私の質問は、私がこのコードをどのように書いたかを正確に理解しようとしています。これは私が必要とすることをしますが、舞台裏で何が起こっているのか正確にはわかりません。そこにある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);
}