Flex Combobox preChange活动

时间:2009-09-30 17:53:48

标签: flex events combobox

我有一个项目,我需要在更改组合框值之前向用户弹出警报。 此功能允许用户在未保存修改时保持当前状态。这意味着用户可以取消更改。

我有一个子类ComboBox并试图挂钩ComboBox.dropdown的ITEM_CLICK,但是在更改值后会触发此事件。另外,我尝试了MOUSE_CLICK和MOUSE_DOWN但没有成功。

在我的代码中,我在CustomComboBox中添加了一个“preChange”事件。应在更改之前触发此事件。另外,我引入了一个名为commitChange的方法,该方法将被手动调用以实际提交更改。

如何达到预期效果?

3 个答案:

答案 0 :(得分: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>

希望这有帮助。

答案 1 :(得分:0)

基本上我在更改之前需要一个事件。我想现在的想法就是......

我确实修改了你的代码,以便在发生更改时触发preChange事件,停止事件传播,并且只有在实际更改后才触发CHANGE事件..

感谢您的快速回答。

答案 2 :(得分:0)

最简单的方法是在ComboBox上向Event.CHANGE添加两个侦听器,然后将要更改之前的处理程序的优先级设置为负值。例如:

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

事件调度的顺序:

  1. preChange(事件:事件)
  2. 继承的更改事件(自动具有默认优先级0)
  3. postChange(事件:事件)