Есть ли способ послушать это? Я могу легко слушать клик, который выбирает RadioButton, но я не могу найти способ слушать, когда RadioButton был отменен.Flex Spark RadioButton Не выбрано событие?
Любые идеи?
Спасибо!
Есть ли способ послушать это? Я могу легко слушать клик, который выбирает RadioButton, но я не могу найти способ слушать, когда RadioButton был отменен.Flex Spark RadioButton Не выбрано событие?
Любые идеи?
Спасибо!
Назад в Flex 2 дня, событие «изменения», вызванное отключением переключателя. Однако это небольшое удобство по какой-то причине исчезло в Flex 3, и я не считаю, что нам было предоставлено какое-либо событие замены.
Управление событиями на уровне RadioButtonGroup все в порядке и хорошо, за исключением того, что есть моменты, когда вы действительно хотите обрабатывать события на уровне переключателя - особенно, если вы надеялись взаимодействовать с записью поставщика данных через itemRenderer, который рисует переключатель.
Удобно, у меня есть немного кода шаблона, который вы можете использовать в качестве замены для RadioButton и RadioButtonGroup, которые обеспечивают событие «unselect» на уровне переключателя. Вот 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 не имеет ничего общего или важного. Вероятно, это просто простое событие, поскольку нет специальной полезной нагрузки.
Я протестировал вышеуказанный код, и все это работает, но, безусловно, есть крайние условия и другие странности, которые следует решать, если они используются в более крупной системе.
Я бы, наверное, попробовал прослушивать событие itemClick или Change в RadioButtonGroup: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/RadioButtonGroup.html#event:itemClick – JeffryHouser
Я согласен, и вы, вероятно, можете это сделать и для отдельной кнопки. Просто проверьте, был ли он выбран или отменен в обработчике событий. Вы можете или не можете получить ложные срабатывания и негативы. Если они просто нажимают на текст или что-то в этом роде, не изменяя значения, у меня возникает соблазн подумать, что все равно будут срабатывать события щелчка, поэтому будьте осторожны. – Panzercrisis
Я смог использовать FlexEvent.UPDATE_COMPLETE на RadioButton, а затем проверить значение выбранного. – user1513171