我正在使用 Adobe flash Builder 开发一个应用程序,一旦触发特定事件,它应该会弹出一个警报窗口。关闭警报框时需要调用另一个事件。但我在 mx.controls 库中看不到 Alert 类。似乎该类(存在于 AS2 中)已从 AS3 中删除。有没有其他方法可以完成相同的功能?
谢谢,普利特什
我正在使用 Adobe flash Builder 开发一个应用程序,一旦触发特定事件,它应该会弹出一个警报窗口。关闭警报框时需要调用另一个事件。但我在 mx.controls 库中看不到 Alert 类。似乎该类(存在于 AS2 中)已从 AS3 中删除。有没有其他方法可以完成相同的功能?
谢谢,普利特什
你需要为你的警报控件定义 closeHandler 。从此处查看 ActionScript 3.0 参考 API http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Alert.html#show ()
使用外部接口。
import flash.external.ExternalInterface;
// tell flash what javascript function to listen for, and what flash function to call in response
ExternalInterace.addCallback('onAlertWindowClosed', onPopupClosed);
function openPopUp():void
{
// this conditional prevents errors when running local (yes, this needs uploaded to work)
if(ExternalInterface.available)
{
// this calls a javascript function in your html
ExternalInterface.call('myJavascriptAlertFuntion');
}
}
// this function is called from the javascript callback **onAlertWindowClosed**
function onPopupClosed():void
{
// do something when your popup closes
}
在html中:
<script type="text/javscript>
// this chunk gets the flash object so you can call its methods
function getFlashMovieObject(movieName)
{
if (window.document[movieName])
{
return window.document[movieName];
}
if (navigator.appName.indexOf("Microsoft Internet") == -1)
{
if (document.embeds && document.embeds[movieName])
return document.embeds[movieName];
}
else
{
return document.getElementById(movieName);
}
}
// function that is called from flash
function myJavascriptAlertFuntion()
{
alert("Hey! Yeah you there!");
}
// call this when you want to tell flash you are closing your popup
function tellFlashMyPopupWindowClosed()
{
// **flashContainer** should be replaced by the name parameter of your flash embed object
var flashMovie = getFlashMovieObject("flashContainer");
flashMovie.onAlertWindowClosed();
}
</script>
要在使用 MXML 和 AS3 的 Mobile 项目中弹出警报,您需要基于 Sparks 组件中的 SkinnablePopUpContainer 创建一个组件。(因为方便地排除了简单的警报。)
我在这里的文档中学习了很多关于 SkinnablePopUpContainer 的阅读:
Spark SkinnablePopUpContainer 容器
总结一下,我在 MXML 中创建了一个以 SkinnablePopUpContainer 作为基类的组件。在我想要添加弹出窗口的视图中,我在 Actionscript 中创建了该类的新实例。我监听组件中的按钮将在用户响应时触发的自定义事件。要显示新的弹出组件,只需调用静态方法 open();。open() 方法需要一个父容器,无论弹出窗口是否应该是模态的。模态的意思是组件下的任何东西都不能接收用户输入。
var alert:SkinnablePopUpContainer = new SkinnablePopUpContainer;
alert.addEventListener( "OK", onOK );
alert.open( this, true );
function onOK(e:Event):void{ trace("User said OK") };
稍后我会尽可能提供一些示例文件。