Мой вопрос здесь, я пытаюсь понять, как работает этот фрагмент кода, который я написал. Это делает то, что мне нужно, но не совсем точно, что происходит за кулисами. Может ли любой ActionScript Pro помочь?Динамическое добавление элементов управления в ActionScript и доступ Правильный экземпляр
Итак, что я делаю, это динамически добавлять кнопки и datagrids, итерации через цикл for. Кнопка управляет видимостью холста, содержащего datagrid, устанавливая свойство 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);
}