1

我可以使用 AsyncToken 收听组件之间的警报按钮单击吗?基本上,我希望有一个方法可以打开带有按钮的警报并让它返回一个 AsyncToken,以便调用该方法的其他组件可以监听按钮单击。

例子:

var token:AsyncToken=methodThatOpensAlert();
token.addResponder(new mx.rpc.Responder(buttonClick));

这样做的方法是什么?谢谢你。

4

1 回答 1

1

您可能可以使用 AsyncToken 来实现此目的,但您也可以只注册从弹出窗口调度的自定义事件,这是一种更简洁的 IMO 方法。真的,你有两个我能想到的相对干净的选择。1 您为弹出窗口中的不同按钮单击设置弹出窗口调度事件,例如“okClicked”“cancelClicked”,创建弹出窗口实例并添加侦听器,然后调用 PopUpManager.addPopUp,否则执行 PopUpManager.createPopUp并保留对返回的显示对象(它创建的弹出窗口的实例)的引用,然后添加您的侦听器。2 你在弹出窗口中创建两个属性类型为函数,你将它们用作回调,

if(okClickedFunction)
    okClickedFunction();

让我知道您是否有特定的需求让您认为必须使用 AsyncToken,但是从查看文档来看,它看起来好像严格意义上可以与其他 RPC 方法一起使用,并且许多属性都是只读的。

编辑:

[SomeUtilClass.as]

private static function methodThatOpensAlert():CustomAlert
{
    return PopUpManager.createPopUp(Application.application, CustomAlert) as CustomAlert;
}

[CustomAlert.as]

[Event(type="flash.events.Event", name="button1Clicked")]
[Event(type="flash.events.Event", name="button2Clicked")]

private function button1Clicked_handler(event:MouseEvent):void
{
    dispatchEvent(new Event("button1Clicked", true));
}
private function button2Clicked_handler(event:MouseEvent):void
{
    dispatchEvent(new Event("button2Clicked", true));
}

[ThingThatUsesAlert]

var ca:CustomAlert = SomeUtilClass.methodThatOpensAlert();
ca.addEventListener("button1Clicked", button1ClickHandler);
ca.addEventListener("button2Clicked", button2ClickHandler);

而且我相信默认情况下鼠标事件仍然会冒泡,因此您实际上可以在弹出窗口中侦听单击事件,然后使用 event.target 确定它是否是您感兴趣的按钮之一。

如果您能理解这一点或需要更多信息,请告诉我。

于 2012-03-24T19:15:40.600 回答