我想在取消选中复选框时向用户显示一个确认框。我的代码工作,虽然我认为这是一个黑客。我听取复选框点击,然后显示提醒。根据结果,我将再次设置复选框。
我的代码是
<?xml version="1.0"?>
<s:NavigatorContent xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" >
<fx:Script><![CDATA[
import mx.controls.Alert;
import mx.events.CloseEvent;
private function handleCheckBoxChange(e:Event):void {
if (!CheckBox(e.target).selected) {
Alert.show("Are you sure you want to deselect?", "Confirm",
Alert.YES | Alert.NO, null, handleAlert, null, Alert.YES);
}
}
public function handleAlert(event:CloseEvent):void {
if (event.detail == Alert.YES) {
trace("yes clicked");
}
else if (event.detail == Alert.NO) {
cb1.selected = true;
trace("no clicked");
}
}
]]></fx:Script>
<s:CheckBox id="cb1" label="cb1" click="handleCheckBoxChange(event)"/>
</s:NavigatorContent>
我不喜欢这件事有两件事
我理想的是,如果用户在警告框中单击“否”,则停止取消选中事件。是否可以在Flex中拦截它?
由于
答案 0 :(得分:2)
解决两个问题的一个解决方案:创建一个扩展CheckBox的自定义类。
您无法在e.stopImmediatePropagation()
事件中使用click
,因为稍后会添加您的ToggleButtonBase
。但是,如果您进行跟踪,则可以在CheckBox
(buttonReleased
的父级)中看到包含名为selected
的受保护函数;此函数将对change
值进行更改并发送public class AlertCheckBox extends CheckBox
{
public function AlertCheckBox()
{
super();
}
override protected function buttonReleased():void
{
if (selected) {
Alert.show("Are you sure you want to deselect?", "Confirm",
Alert.YES | Alert.NO, null, handleAlert, null, Alert.YES);
return;
}
super.buttonReleased();
}
public function handleAlert(event:CloseEvent):void {
if (event.detail == Alert.YES) {
selected = false;
}
}
}
事件。你需要在新课程中做的就是重写这个功能。
{{1}}