Apache flex Flex Spark单选按钮取消选择事件?

Apache flex Flex Spark单选按钮取消选择事件?,apache-flex,events,radio-button,Apache Flex,Events,Radio Button,有没有办法听一听?我可以很容易地收听选择单选按钮的点击,但我似乎找不到一种方法来收听取消选择单选按钮的情况 有什么想法吗 谢谢 在Flex 2天中,取消选择单选按钮时会触发“更改”事件。然而,由于某种原因,这种小小的便利在Flex3中消失了,我不相信我们提供了任何类型的替换事件 在RadioButtonGroup级别处理事件是很好的,但有时确实需要在单选按钮级别处理事件——特别是如果希望通过绘制单选按钮的itemRenderer与数据提供程序条目交互 方便的是,我有一点样板代码,可以作为Radi

有没有办法听一听?我可以很容易地收听选择单选按钮的点击,但我似乎找不到一种方法来收听取消选择单选按钮的情况

有什么想法吗


谢谢

在Flex 2天中,取消选择单选按钮时会触发“更改”事件。然而,由于某种原因,这种小小的便利在Flex3中消失了,我不相信我们提供了任何类型的替换事件

在RadioButtonGroup级别处理事件是很好的,但有时确实需要在单选按钮级别处理事件——特别是如果希望通过绘制单选按钮的itemRenderer与数据提供程序条目交互

方便的是,我有一点样板代码,可以作为RadioButton和RadioButtonGroup的插入式替换,它们在单选按钮级别提供“取消选择”事件。这是SmartRadioButton,首先:

<?xml version="1.0" encoding="utf-8"?>
<s:RadioButton xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script>
        <![CDATA[
            import events.SmartRadioButtonEvent;

            public function notifyDeselect():void {
                dispatchEvent(new SmartRadioButtonEvent('deselect'));
            }
        ]]>
    </fx:Script>

    <fx:Metadata>
        [Event(name="deselect", type="events.SmartRadioButtonEvent")]
    </fx:Metadata>
</s:RadioButton>

[事件(name=“取消选择”,type=“events.SmartRadioButtonEvent”)]
以下是SmartRadioButtonGroup:

<?xml version="1.0" encoding="utf-8"?>
<s:RadioButtonGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx"
                    change="selectionChanged();"
                    >
    <fx:Script>
        <![CDATA[
            import spark.components.RadioButton;

            import components.SmartRadioButton;

            protected var oldSelection:SmartRadioButton = null;

            // Notify our old selection that it has been deselected, and update
            // the reference to the new selection.
            public function selectionChanged():void {
                var newSelection:SmartRadioButton = this.selection as SmartRadioButton;
                if (oldSelection == newSelection) return;
                if (oldSelection != null) {
                    oldSelection.notifyDeselect();
                }
                oldSelection = newSelection;
            }

            // Override some properties to make sure that we update oldSelection correctly,
            // in the event of a programmatic selection change.
            override public function set selectedValue(value:Object):void {
                super.selectedValue = value;
                oldSelection = super.selection as SmartRadioButton;
            }

            override public function set selection(value:RadioButton):void {
                super.selection = value;
                oldSelection = super.selection as SmartRadioButton;
            }

        ]]>
    </fx:Script>
</s:RadioButtonGroup>

其中包含两个属性重写,以确保在对组的选择进行编程更改时正确更新oldSelection

SmartRadioButtonEvent不是什么新奇或重要的东西。它可能只是一个普通事件,因为没有特殊的负载


我已经测试了上述代码,它们都能正常工作,但如果在更大的系统中使用,肯定会有边缘条件和其他需要解决的奇怪问题。

我可能会尝试监听RadioButtonGroup的itemClick或Change事件:我同意,您也可能会对单个单选按钮执行此操作。只需检查事件处理程序中是否选中或取消选中它。你可能会也可能不会得到假阳性和假阴性。如果他们只是单击文本或其他内容,而没有实际更改值,我很想这仍然会触发单击事件,因此请小心。我可以在RadioButton上使用FlexEvent.UPDATE_COMPLETE,然后检查所选的值。