Flex AsyncToken用于侦听“警报”框按钮

时间:2012-03-24 16:05:47

标签: flex asynctoken

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

示例:

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用AsyncToken来实现此目的,但您也可以只注册从弹出窗口发送的自定义事件,这是一种更清晰的IMO方法。真的,你有两个我能想到的相对干净的选择。 1你弹出调度事件如“okClicked”“cancelClicked”弹出窗口中的不同按钮点击,你创建一个弹出的实例并添加监听器然后调用PopUpManager.addPopUp,否则你做PopUpManager.createPopUp并保持对返回的显示对象(它创建的弹出窗口的实例)的引用,然后添加您的侦听器。 2你在pop up中输入两个属性作为函数,你用它们作为回调,所以当你创建弹出窗口时你设置okClickedFunction和cancelClickedFunction(或者你的按钮可能是什么)然后在你弹出的弹出窗口中按钮上的cilck处理程序,检查是否设置了适当的回调函数,如果是,则调用它,如

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来确定它是否是你感兴趣的按钮之一。

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