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