有没有办法听这个?我可以轻松地收听选择 RadioButton 的单击,但我似乎找不到在取消选择 RadioButton 时收听的方法。
有任何想法吗?
谢谢!
有没有办法听这个?我可以轻松地收听选择 RadioButton 的单击,但我似乎找不到在取消选择 RadioButton 时收听的方法。
有任何想法吗?
谢谢!
回到 Flex 2 天,当取消选择单选按钮时触发“更改”事件。然而,出于某种原因,这种小小的便利在 Flex 3 中消失了,而且我不相信我们得到了任何形式的替换事件。
在 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>
这是 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 没有什么花哨或重要的东西。它可能只是一个普通的事件,因为没有特殊的有效负载。
我已经测试了上面的代码,并且一切正常,但是如果在更大的系统中使用它,肯定存在边缘条件和其他应该解决的奇怪问题。