2010-10-05 67 views
1

在事件处理程序中,我有一个Alert.show(...)提示用户进行确认。如何捕获警报提示的选择并在事件处理程序中使用它。例如:如何捕获警报对话框选择?

private function mainEvtHandler(event:DynamicEvent):void { 
var alert:Alert = Alert.show("Are you sure?", "Confirmation", Alert.YES|Alert.NO, this, alertHandler); 
// How can I retrieve the selection and use it within this event handler? 
// i.e. if (alert == Alert.Yes) { ... 
var index:int = arrayColl.getItemIndex(event.data) 
... 
... 

回答

1

你可以声明alertHandler嵌套函数 ...

private function mainEvtHandler(event:DynamicEvent):void { 

    var alertResult: int = -1; 

    function alertHandler(evt:CloseEvent):void { 
    alertResult = evt.detail; 
    } 

    var alert:Alert = Alert.show("Are you sure?", "Confirmation", Alert.YES|Alert.NO, this, alertHandler); 
    if (alertResult == Alert.Yes) { 
    var index:int = arrayColl.getItemIndex(event.data); 
    ... 

} 

...或者你可以使用匿名函数

private function mainEvtHandler(event:DynamicEvent):void { 
    Alert.show("Are you sure?", "Confirmation", Alert.YES|Alert.NO, this, 
     function (nestedCloseEvent:CloseEvent):void { 
     if (nestedCloseEvent.detail == Alert.Yes) { 
      var index:int = arrayColl.getItemIndex(event.data); 
      ... 
     } 
     } 
); 
} 
+0

别最好alertHandler也可以是它自己的独立函数,在mainEvtHandler之外定义。 – cobaltduck 2010-10-05 20:13:58

+0

@Wade,我认为问题的根源在于可以直接访问'event.data',这个'event.data'可以在全局和外部处理,但我想这就是OP想要的。 – splash 2010-10-05 20:35:20

+0

是的,我的首选是将“事件”var保留在处理程序本地,而不是使其成为全局。谢谢。 – MarkPenn 2010-10-07 17:58:28