mx.controls.Alert.show()でアラート ボックスを表示し、そのボタンをマウス (または Enter キー) でクリックするか、任意の場所をクリックすると、これらのイベントは親ウィンドウにも渡され、最終的にそこでボタンがトリガーされます。
アラートインスタンスの属性を設定するなど、これを防ぐ簡単な方法はありますか?
mx.controls.Alert.show()でアラート ボックスを表示し、そのボタンをマウス (または Enter キー) でクリックするか、任意の場所をクリックすると、これらのイベントは親ウィンドウにも渡され、最終的にそこでボタンがトリガーされます。
アラートインスタンスの属性を設定するなど、これを防ぐ簡単な方法はありますか?
show()closeHandler
でパラメーターを設定すると、 event.stopPropagation()を呼び出して、後続のノードでイベントが処理されないようにすることができます。
コードは次のようになります。
Alert.show("Message", "Title", Alert.OK, parent, onClose);
function onClose(event:CloseEvent):void
{
event.stopPropagation();
// Do close stuff here
}
Flex 4.6 の例を Flash Builder 4.6 に追加:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="onCreationComplete(event)">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.events.FlexEvent;
private function onCreationComplete(e:FlexEvent):void
{
addEventListener(MouseEvent.CLICK, onAppClick);
showAlert();
}
private function showAlert():void
{
Alert.show("An Alert", "Alert Title", Alert.OK | Alert.CANCEL, this, onAlertClose);
}
private function onAlertClose(e:CloseEvent):void
{
e.stopPropagation();
trace("Alert Close");
}
private function onAppClick(e:MouseEvent):void
{
trace("App Click");
}
private function onBtnClick(e:MouseEvent):void
{
trace("Button Click");
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout
gap="12"/>
</s:layout>
<s:Button
label="A Clickable Button"
click="onBtnClick(event)"/>
<s:Button
label="Show Alert"
click="showAlert()"/>
</s:WindowedApplication>