簡體   English   中英

Flex Combobox preChange事件

[英]Flex Combobox preChange event

我有一個項目,需要在更改組合框值之前向用戶彈出警報。 如果未保存修改,此功能將允許用戶保持當前狀態。 這意味着用戶將能夠取消更改。

我對ComboBox進行了子類化,並嘗試掛接ComboBox.dropdown的ITEM_CLICK,但更改該值后會觸發此事件。 另外,我嘗試了MOUSE_CLICK和MOUSE_DOWN,但沒有成功。

在我的代碼中,我向CustomComboBox添加了“ preChange”事件。 進行更改之前應觸發此事件。 另外,我介紹了一種稱為commitChange的方法,該方法將被手動調用以實際提交更改。

如何獲得理想的結果?

這是我的方法:

<?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>

希望這可以幫助。

基本上,在進行更改之前,我需要一個事件。 我想現在就可以了...

我確實修改了您的代碼,以使其在發生更改時觸發preChange事件,停止事件傳播,並且只有在真正使更改發生后才觸發CHANGE事件..

感謝您的迅速答復。

最簡單的方法是在ComboBox的Event.CHANGE上添加兩個偵聽器,然后將要在更改之前觸發的處理程序的優先級設置為負值。 例如:

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

事件調度的順序:

  1. preChange(event:Event)
  2. 繼承的更改事件(自動具有默認優先級0)
  3. postChange(event:Event)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM