0

以下代码将仅将循环中的最后一个 Widget 添加到所有侦听器函数。所有函数都会在最后一个对象上调用 toggleShow()。

为什么会发生这种情况,有没有办法让每个 Widget 对象在相应的函数中被引用?

for each (var w:Widget in workspace.getWidgetList()) {
    var widgetShow:NativeMenuItem = menu.addItem(new NativeMenuItem("Show " + w.title)); 
    widgetShow.addEventListener(Event.SELECT, function():void {
        w.toggleShow();
    }); 
}
4

1 回答 1

1

让它成为一个函数,这是因为循环运行到最后并且 w 成为该列表中的最后一个元素,因此当调用匿名函数时,它总是使用最后一个元素:

for each (var w:Widget in workspace.getWidgetList()) {
   addMenuItem(w);
}

function addMenuItem(w:Widget):void
{
    var widgetShow:NativeMenuItem = menu.addItem(new NativeMenuItem("Show " + w.title)); 
    widgetShow.addEventListener(Event.SELECT, function():void {
        w.toggleShow();
    }); 
}
于 2012-07-09T14:15:49.303 回答