2013-05-21 4 views
0

Есть ли способ послушать это? Я могу легко слушать клик, который выбирает RadioButton, но я не могу найти способ слушать, когда RadioButton был отменен.Flex Spark RadioButton Не выбрано событие?

Любые идеи?

Спасибо!

+1

Я бы, наверное, попробовал прослушивать событие itemClick или Change в RadioButtonGroup: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/spark/components/RadioButtonGroup.html#event:itemClick – JeffryHouser

+0

Я согласен, и вы, вероятно, можете это сделать и для отдельной кнопки. Просто проверьте, был ли он выбран или отменен в обработчике событий. Вы можете или не можете получить ложные срабатывания и негативы. Если они просто нажимают на текст или что-то в этом роде, не изменяя значения, у меня возникает соблазн подумать, что все равно будут срабатывать события щелчка, поэтому будьте осторожны. – Panzercrisis

+0

Я смог использовать FlexEvent.UPDATE_COMPLETE на RadioButton, а затем проверить значение выбранного. – user1513171

ответ

0

Назад в 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 не имеет ничего общего или важного. Вероятно, это просто простое событие, поскольку нет специальной полезной нагрузки.

Я протестировал вышеуказанный код, и все это работает, но, безусловно, есть крайние условия и другие странности, которые следует решать, если они используются в более крупной системе.

Смежные вопросы