Flex选择取消选中复选框的是/否框

时间:2011-11-21 10:10:38

标签: flex user-interface checkbox flex4

我想在取消选中复选框时向用户显示一个确认框。我的代码工作,虽然我认为这是一个黑客。我听取复选框点击,然后显示提醒。根据结果​​,我将再次设置复选框。

我的代码是

<?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>

我不喜欢这件事有两件事

  1. 该代码特定于cb1,不能重复用于其他复选框
  2. 警报显示时取消选中该复选框。然后,当用户单击否时,再次选中该复选框。
  3. 我理想的是,如果用户在警告框中单击“否”,则停止取消选中事件。是否可以在Flex中拦截它?

    由于

1 个答案:

答案 0 :(得分:2)

解决两个问题的一个解决方案:创建一个扩展CheckBox的自定义类。 您无法在e.stopImmediatePropagation()事件中使用click,因为稍后会添加您的ToggleButtonBase。但是,如果您进行跟踪,则可以在CheckBoxbuttonReleased的父级)中看到包含名为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}}