2009-09-30 2 views
0

У меня есть проект, в котором мне нужно вывести предупреждение пользователю перед изменением значения combobox. Эта функция позволяет пользователю оставаться в текущем состоянии, если изменения не были сохранены. Это означает, что пользователь сможет отменить изменение.Flex Combobox preChange event

У меня есть подкласс ComboBox и попытался подключиться к ITEM_CLICK из ComboBox.dropdown, но это событие запускается после изменения значения. Кроме того, я пробовал MOUSE_CLICK и MOUSE_DOWN, но безуспешно.

В моем коде я добавил событие preChange в свой CustomComboBox. Это событие должно быть инициировано до внесения изменений. Кроме того, я ввел метод, называемый commitChange, который будет вызываться вручную для фактического фиксации изменения.

Как достичь желаемого результата?

+0

Когда в тегах появились изображения? круто.. – Shoban

ответ

0

Это, как я сделал это:

<?xml version="1.0" encoding="utf-8"?> 
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="onComplete();"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.events.CloseEvent; 
      import mx.controls.Alert; 
      import mx.events.ListEvent; 
      private function onComplete():void { 
       addEventListener(ListEvent.CHANGE, onChange); 
       persistLastIndex(); 
      } 

      private var _lastIndex:Number = 0; 

      private function persistLastIndex():void { 
       _lastIndex = selectedIndex; 
      } 

      private function onChange(event:ListEvent):void { 
       Alert.show("Are you sure you want to change the selection?", "", Alert.YES|Alert.NO, null, onAlertClicked); 
      } 

      private function onAlertClicked(event:CloseEvent):void { 
       if (event.detail == Alert.NO) { 
        selectedIndex = _lastIndex; 
       } else { 
        _lastIndex = selectedIndex; 
       } 
      } 

     ]]> 
    </mx:Script> 
</mx:ComboBox> 

И называть его:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:rad="uk.co.rad.*"> 
    <rad:MyComboBox> 
     <rad:dataProvider> 
      <mx:Array> 
       <mx:Object data="1" label="Value 1" /> 
       <mx:Object data="2" label="Value 2" /> 
      </mx:Array> 
     </rad:dataProvider> 
    </rad:MyComboBox> 
</mx:Application> 

Надеется, что это помогает.

0

В принципе, мне нужно событие до того, как будет произведена смена. Я думаю, что теперь это будет сделано ...

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

Спасибо за ваш быстрый ответ.

0

Самый простой способ сделать это - добавить двух слушателей в Event.CHANGE на ComboBox, а затем установить приоритет обработчика, который вы хотите запустить до, до изменения в качестве отрицательного значения. Например:

myComboBox.addEventListener(Event.CHANGE, preChange, false, -100); 
myComboBox.addEventListener(Event.CHANGE, postChange, false, 100); 

Порядок проведения диспетчерское

  1. preChange (событие: Event)
  2. наследственные события изменения (автоматически имеют приоритет по умолчанию 0)
  3. postChange (событие: Событие)